使用DataGridView对DataTable列进行排序

时间:2016-02-18 10:02:23

标签: vb.net sorting datagridview datatable

我试图对包含一些日期和值的DataTable进行排序。我将DataTable信息传递给DataGridView并对数据进行排序,然后尝试将其传回去。

以下代码成功运行,但不会产生任何差异:

Form1.DataGridView1.DataSource = ChartTable
Form1.DataGridView1.Sort(Form1.DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
ChartTable = CType(Form1.DataGridView1.DataSource, DataTable).Copy()
ChartTable = ChartTable.DefaultView.ToTable

For i = 0 To ChartTable.Rows.Count - 1
    Debug.Print("ChartTable = " & ChartTable.Rows(i)(0) & ", DataGrid = " & Form1.DataGridView1.Rows(i).Cells(0).Value)
Next 

这是Debug.Print

的输出
ChartTable = 30/12/15, DataGrid = 27/10/15
ChartTable = 27/10/15, DataGrid = 19/11/15
ChartTable = 29/12/15, DataGrid = 22/12/15
ChartTable = 22/12/15, DataGrid = 29/12/15
ChartTable = 19/11/15, DataGrid = 30/12/15

ChartTable(也就是DataTable)仍处于原始未分类状态。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

我认为这是因为Datagridview为自己排序数据,而不是对他的数据源进行更改。复制数据源时,正在复制未排序的数据表。

为了做你想做的事,我想你可能需要做一个过程来逐行获取datagridview到数据表。

但是,在我看来,如果您在填充数据表之前对信息进行排序,它应该会更好(并且更快)。

答案 1 :(得分:0)

您可以使用此代码对数据表进行排序:

    Dim filterExp As String = ""
    Dim sortExp As String = dt.Columns.Item(0).ColumnName
    Dim i As Integer
    Dim dtrow() As DataRow
    dtrow = dt.Select(filterExp, sortExp, DataViewRowState.CurrentRows)

    For i = 0 To dtrow.Length - 1
       DataGridView1.Rows.Add(dtrow(i)(dt.Columns.Item(0).ColumnName))
    Next