Winforms DataGridVeiw(WinForm)-确定行的重新排序时间

Winforms DataGridVeiw(WinForm)-确定行的重新排序时间,winforms,datagridview,Winforms,Datagridview,在我们的一个WinForm应用程序中,我们使用的DataGridView启用了列排序和SortDescriptions 如果用户修改要排序的单元格之一,则应用排序,网格按新顺序绘制行 我需要在绘制DataGridRows之前访问它们,但是在对它们进行排序之后。我知道我可以使用DataGridView.RowPrePaint(),但这似乎有些过分。当鼠标悬停在某些单元格上时,它会触发,等等。当顺序发生变化时,我只需要进入行。我想也许我可以处理DGV上的“排序”事件,但这只能在用户单击一个列标题后触

在我们的一个WinForm应用程序中,我们使用的DataGridView启用了列排序和SortDescriptions

如果用户修改要排序的单元格之一,则应用排序,网格按新顺序绘制行

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

我今天在谷歌上搜索了很多,没有提出任何建议


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

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

立旗

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


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

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

当DataGridView控件同时包含绑定列和未绑定列时 如果已排序,则无法维护未绑定列中的值 自动地要维护这些值,必须实现虚拟 通过将VirtualMode属性设置为true并处理 CellValueRequired和CellValuePushed事件

有关详细信息,请参见如何:在Windows中实现虚拟模式 窗体DataGridView控件。此外,还可以按未绑定列进行排序 不支持绑定模式

希望这有帮助

真的,Linda Liu

这就是问题所在。“排序”事件不会在“自动排序”发生时触发(我在帖子中说的是“排序”,但我的意思是“排序”)。它只在用户第一次单击列标题时触发。我需要一个事件,该事件在重新排序行(由于列更改或插入新行)之后,但在绘制网格之前触发。