【发布时间】:2011-07-11 06:48:11
【问题描述】:
有没有人尝试实现以下场景?我有兴趣了解有哪些解决方案可以实现这一目标。这对我们的用户来说已经成为一个真正的痛苦......
我们有一个 WPF DataGrid,它使用户能够根据列(其中 Column = 值或开始于、结束于、包含等)过滤他们的数据行。他们还可以通过单击其中一个列标题对数据进行排序,或者我们还为他们提供了一个排序窗口,他们可以在其中添加多个列并为每列选择升序/降序(仅应用于每个列的“SortDirection”属性他们选择,它似乎也使用“CollectionView”和 SortDescriptions)。
问题是当用户正在编辑数据并应用了“过滤器”或“排序”(或两者)时,如果用户编辑这些过滤/排序列之一上的值,该行将“移动”并且带上光标。如果新值是经过“过滤”的值,则该行将完全消失(因为用户应用了“过滤”,它应该会消失)。
他们希望发生以下两种情况之一:
1 - 继续并在每个单元格更改后自动排序和过滤,如果行“移动”,则将光标移动到下一行(相同的单元格)而不是光标跟随行到新的目的地(可能滚动当前可查看的数据行离开屏幕)。
2 - 编辑一行后,禁用所有排序和过滤,直到用户单击“保存”或“刷新”(或其他选项)?
我还可以看到我们可以在哪里采用一种方法进行过滤,另一种方法进行排序。
有没有人有更好的想法或对如何实现这一点有任何想法?
我有几个想法(例如,要禁用排序:在我的 CellEditEnding 事件处理程序中,我可以存储用户排序选项,从每一列中清除它们,然后在用户单击保存/重置时重新应用它们,或者也许当正在编辑数据时,我可以处理“排序”事件并将“e.handled”设置为true??)。我对 WPF 和 DataGrid 还很陌生,我想知道是否存在“最佳实践”或我尚未找到的属性,例如“DisableSorting=true/false”(哈哈)。
想法?意见?
【问题讨论】:
-
您是如何在编辑行时设法更改过滤器的?因为当控件失去焦点并且 CollectionView 出现错误“'Filter' is not allowed during an AddNew or EditItem”时编辑完成。
-
我考虑过绑定到 DataGridRow 类的 IsEditing 属性,但 Filter 属性不允许测试您的场景。
-
我没有。我只是说这是一个“想法”。 :) 我没有看到一个简单的解决方案。也许覆盖执行实际排序的 DataGrid 方法?我似乎找不到它。有一种“排序”方法,但它只是在单击列时触发。实际的“SORT”是什么方法?
-
涡流。我的意思是......一旦用户完成编辑,然后列排序,他们可能会跳转到数据集中一个全新的地方并失去他们的位置。这基本上是为一组用户设计的 Microsoft Access 替代品。我不确定您是否熟悉 Access 如何执行此操作,但即使您应用了排序和过滤,它也不会重新应用到您编辑的行。
-
@Vortex。虽然它正在改变它在网格中的位置。我没有看到任何调用 Refresh 的地方。这是关于我试图克服的同一问题的另一篇文章:social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/…
标签: wpf datagrid wpfdatagrid