DataGridView(WinForm) - 确定何时重新排序行

时间:2011-04-01 21:41:02

标签: winforms datagridview

在我们的一个WinForm应用程序中,我们使用DataGridView启用了Column Sorting和SortDescriptions。

如果用户修改了一个正在排序的单元格,则会应用排序,并且网格会按新顺序绘制行。

我需要在绘制之前访问DataGridRows,但是在对它们进行排序之后。我知道我可以使用DataGridView.RowPrePaint(),但这似乎有点矫枉过正。当鼠标悬停在某些单元格等上时它会触发。当排序发生变化时,我只需要进入行。我想也许我可以处理" Sorted" DGV上的事件,但只有在用户单击其中一个列标题后触发,但是当DGV应用任何现有的Column Sorts或SortDescriptions时,我需要到达行。基本上,可以在编辑其中一个单元格之后对行进行重新排序(自动排序),在通过RowEdit"模板"来修改行之后对DGV进行OR排序。

今天我已经搜索了相当多的内容并且没有提出任何建议。

有什么建议吗? (除了处理DataGridView.RowPrePaint事件....)

2 个答案:

答案 0 :(得分:0)

我不确定它是否有效,但如果我是你,我会保留RowPrePaint()事件。

设置标志

bool RowSorted;

在排序函数中将RowSorted变量设置为true,并在对行进行排序后再次在排序函数中触发RowPrePaint事件。

在RowPrePaint函数中,我会检查标志。如果为true,则绘制行; if false e.Handled = true;

答案 1 :(得分:0)

我找到了答案。这是我面临的确切问题(来自msdn):

  

当DataGridView控件包含绑定和未绑定列时   排序后,无法保留未绑定列中的值   自动。要维护这些值,您必须实现虚拟   通过将VirtualMode属性设置为true并处理该模式   CellValueNeeded和CellValuePushed事件。

     

有关详细信息,请参阅如何:在Windows中实施虚拟模式   表单DataGridView控件。此外,按未绑定列排序   在绑定模式下不受支持。

     

希望这有帮助。

     

此致,Linda Liu