【问题标题】:DataGridViews Sorting VB.NetDataGridViews 排序 VB.Net
【发布时间】:2017-09-21 08:52:36
【问题描述】:

所以我有一个我似乎无法克服的问题。我将排序应用于我的 Datagrid 视图,如下所示。 (我可以在 CoulmunHeaderMouseClick 事件中手动执行此操作,或者允许它自动完成,但为了清楚起见,我已包含手动步骤)

DataGridView1.Sort(DataGridView1.Columns(_sortedColumnIndex),
_sortedColumnDirection)

现在问题来了。在 DGV 中编辑/添加一行后,该行会自动排序。我希望禁用排序并且不让它“捕捉”到它的排序位置。

有没有办法在 CellEndEdit 事件中禁用对列的排序,以便仅在单击列的标题时才应用排序。

示例(在列 2 上应用 ASC 排序)

col1 | col2

一个 | 1

b | 2

c | 3

更改后自动排序的结果

col1 | col2

一个 | 1

c | 1

b | 2

编辑单元格后想要的结果

col1 | col2

一个 | 1

b | 2

c | 1

将排好序的列更改为 col1 不是一种选择。

【问题讨论】:

  • 我尝试过的方法:将 SortMode 设置为 NotSortable (DataGridView1.Columns(e.ColumnIndex).SortMode = DataGridViewColumnSortMode.NotSortable) 清除 DGV 上的排序 (DataGridView1.Sort(DataGridView1.Columns(_sortedColumnIndex), Nothing)) 尝试使用不同的排序模式。我已经完成了程序化和自动排序。
  • 这是我的建议。将您的数据放入DataTable 并将其绑定到您的DataGridView。对网格进行排序后,您应该可以在 DataTableDefaultView 上调用 ToTable 以获取原始 DataTable 的副本,该副本具有相同的顺序但没有应用排序。然后,您可以将新的 DataTable 绑定到网格来代替旧的,您应该会看到您想要的行为。

标签: vb.net sorting datagridview


【解决方案1】:

我刚刚对此进行了测试,它基本上可以正常工作。

Private Sub DataGridView1_Sorted(sender As Object, e As EventArgs) Handles DataGridView1.Sorted
    Dim currentTable = DirectCast(DataGridView1.DataSource, DataTable)
    Dim newTable = currentTable.DefaultView.ToTable()

    DataGridView1.DataSource = newTable
End Sub

不过,它确实有一些怪癖,都与排序时当前单元格在新行中有关。我会尝试改进它,但我认为现在值得发布它,您或其他人也许可以将它用作同时获得更完整解决方案的基础。

【讨论】:

  • 谢谢,我会给这个 bash 并让你知道我是否正确,可能需要修改这个 abit 以刷新原始数据表,因为我在我的代码的其他部分使用它。
  • 好的,所以最初它可以工作,但我需要用新的数据表更新我的原始数据集以保留更改的值
  • 如果每个DataRowRowState 保持不变,我没有检查,那么您应该可以简单地使用最终的DataTable 来保存更改。如果没有,您应该可以调用DataTable.Merge 将最终数据合并回原来的DataTable
  • 嗨,经过一番修改,我让它工作了。非常感谢你的帮助。基本上最后我只是用新的数据表替换我的原始数据源,这样当我保存等时,我仍然会保留我的更改。行状态没有被维护,因为它是一个新表。 Dim currentTable As DataTable = DirectCast(DataGridView1.DataSource, DataTable) Dim newTable As DataTable = currentTable.DefaultView.ToTable() DataGridView1.DataSource = newTable _originalDataTable = newTable
  • 当我提到正在维护的RowState 时,我说的是新表中的RowState 与旧表中的相应行相同。如果您要保存新表,那么这正是必须发生的事情,在这种情况下这绝对是一件好事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 2016-09-10
相关资源
最近更新 更多