【问题标题】:How to sort DataGridView Column by date in VB visual studio 2012?如何在 VB Visual Studio 2012 中按日期对 DataGridView 列进行排序?
【发布时间】:2014-09-11 12:46:32
【问题描述】:

在我的 DGV 中,我在第 (1) 列中有日期列表:

11-Sep-2014
11-May-2011
11-Jan-2014
11-Mar-2014
12-Sep-2010

如何得到这样的降序结果:

11-Sep-2014
11-Mar-2014
11-Jan-2014
11-May-2011  
12-Sep-2010

Column(1) 不是 DateTime 类型而是 SortText 类型,我必须这样设置字符串。可以排序吗?

我尝试过使用代码:

DGV.Columns(1).SortMode = DGV.Sort(DGV.Columns(1), System.ComponentModel.ListSortDirection.Descending)

但它没用,它不按日期排序:(

这是我的 DGV:

好的,这是我的 DGV 代码简介:

导入 System.Data.OleDb

公共课 LapTransaksiSimpanan

Public Sub Koneksi()
    str = "provider=microsoft.jet.oledb.4.0;data source=dbkoperasi.mdb"
    Conn = New OleDbConnection(str)
    If Conn.State = ConnectionState.Closed Then
        Conn.Open()
    End If
End Sub

Sub TampilGrid()
    da = New OleDbDataAdapter("select * from LapTransaksiSimpanan", Conn)
    ds = New DataSet
    da.Fill(ds, "LapTransaksiSimpanan")
    DGV.DataSource = ds.Tables("LapTransaksiSimpanan")

    'on the below I wanna to sort the column, my code below is useless :(
    DGV.Sort(DGV.Columns(1), System.ComponentModel.ListSortDirection.Descending)

    DGV.Columns("ID_Simpanan").Width = 120
    DGV.Columns("NAK").Width = 37
    DGV.Columns("Tanggal").Width = 75
    DGV.Columns("Jumlah").Width = 110
End Sub

Private Sub Setoran_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Call Koneksi()
    Call TampilGrid()
End Sub

结束类

【问题讨论】:

  • 您的日期列是如何声明的?另外,您是如何将其添加到您的表单中的?
  • 您的日期列表是字符串列表还是实际类型“日期”?如果它是一个字符串,它将像在 DGV 中那样进行排序。您可以通过更改列中的类型或创建自定义排序 ICompare 来修复它
  • 请显示一些代码,特别是绑定部分。如果绑定到数据表,还包括该数据表的填充方式。
  • 我的日期列表是字符串,但这是从格式日期获取的。我必须将 Tanggal 列设置为字符串,如何排序?

标签: vb.net datagridview


【解决方案1】:

storingdisplaying 数据之间存在差异。

您需要更改数据库表架构。 Tanggal 列的类型应为 datedatetime。解决此问题后,使用自定义格式显示日期就很简单了:

Me.DGV.Columns("Tanggal").DefaultCellStyle.Format = "dd-MMM-yyyy"

如果您由于某种原因无法更改架构,则需要通过实现IComparer 创建自定义比较器。 this MSDN page底部有一个例子。

【讨论】:

    【解决方案2】:
        Dim tnd As Date
        For Me.i = 0 To X1.RowCount - 2
            tnd = X1.Item(1, i).Value
            X1.Item(6, i).Value = tnd.ToOADate.ToString
        Next
    

    X1 是 DataGridView 第 1 列的日期为 1987 年 5 月 4 日 第 6 列将计算为整数中的 MS 日期数,并且必须转换为字符串。 确保 X1 网格已启用排序 现在只需单击第 6 列标题进行排序。 希望有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-28
      • 2012-02-12
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      • 2012-12-08
      • 2020-01-15
      相关资源
      最近更新 更多