2011-04-01 66 views
0

在我们的WinForm应用程序之一中,我们使用了启用了列排序和SortDescriptions的DataGridView。DataGridVeiw(WinForm) - 确定何时对行进行了重新排序

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

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

我今天在google上搜索了很多,并没有提出任何建议。

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

回答

0

我找到了答案。这是我面对(从MSDN)确切的问题:

当含有两个结合的和未结合的列 排序DataGridView控件,在未结合列中的值不能被自动保持 。要保持这些值,您必须通过将VirtualMode属性设置为true并处理CellValueNeeded和CellValuePushed事件来实现虚拟 模式。

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

希望这会有所帮助。

真诚,林达刘

0

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

设置一个标志

bool RowSorted; 

设置RowSorted变量排序功能真实,再次触发了RowPrePaint事件中的行进行排序后排序功能。

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

+0

这就是问题。 “排序”事件不会在发生“自动排序”时触发(我在文章中说“排序”,但我的意思是“排序”,只有当用户第一次点击列标题时才会触发。在行被采用之后触发(由于列更改或新行被插入),但在绘制Grid之前。 – Shayne 2011-04-03 18:45:05

相关问题