【问题标题】:Sorting DataTable Column Using DataGridView使用 DataGridView 对 DataTable 列进行排序
【发布时间】:2016-02-18 10:02:23
【问题描述】:

我正在尝试对包含一些日期和值的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)仍处于其原始未排序状态。

我错过了什么吗?

【问题讨论】:

  • 您想对查询中的数据进行排序还是允许用户对 DataGridView 进行排序?
  • 用户看不到DataGridView,它只是用来尝试和提供排序
  • 如果您使用DataGridView1.Sort(Form1.DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Ascending) 创建一个按钮,它会对您的datagridview 进行排序吗?
  • 是的,Debug.Print 的输出显示 datagridview 已按升序排序
  • Quote : "首先,即使您将 DataTable 对象绑定到 DataSource,它也会从 DataGridView 中分离出来,也就是说,如果您更改 DataGridView,它不会影响您的 DataTable。检查此link,以获得完整答案。

标签: vb.net sorting datagridview datatable


【解决方案1】:

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

要做你想做的,我认为你可能需要做一个过程来逐行获取数据网格视图到数据表。

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

【讨论】:

  • 我无法对之前的信息进行排序,因为它是从word文档中逐行读取的,不幸的是
【解决方案2】:

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

    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

【讨论】:

  • 谢谢,但我收到一个错误:Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.。所以我尝试删除数据源,但列被删除了,我收到一个错误,如果没有列,则无法添加行
  • 删除 datagridview 数据源后执行此 Datagridview1.Datasource=Nothing,您必须添加这样的列: Dim workCol As DataColumn = datatable.Columns.Add( _ "Column1", Type.GetType ("System.Datetime"))
  • 您必须在 for 循环下方添加该代码。如果可行,现在让我来。
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 2015-04-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
  • 2011-08-12
相关资源
最近更新 更多