我试图对包含一些日期和值的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)仍处于原始未分类状态。
我错过了什么吗?
答案 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