【问题标题】:VS2010 WPF DataGrid Sorts ImproperlyVS2010 WPF DataGrid 排序不正确
【发布时间】:2013-08-22 18:11:02
【问题描述】:

我正在使用 WPF DataGrid 程序(C#、VS 2010)生成、绑定列,并且 DataGrid 无法正确排序数据。

CanUserSortColumns 设置为 true。 SortMemberPath 设置为与网格中显示的文本相同的属性。

无论用户对哪一列进行排序,尽管排序图标显示在相应的列上,DataGrid 只是交替第一列的排序顺序。

column.Header = departmentColumn.ColumnHeader;
column.Width = departmentColumn.ColumnWidth;
column.Binding = new Binding("Cells[" + departmentColumn.Ordinal.ToString() + "]");
column.SortMemberPath = "DisplayString";

DataGrid 显示或使用不正确的任何其他数据都没有问题,所以我很难过。为什么排序只考虑第一列中的文本,而其他所有内容都绑定到相应列中的数据?

【问题讨论】:

    标签: c# wpf sorting datagrid


    【解决方案1】:

    这就是我对数据网格进行排序的方式,也许它会有所帮助

    Dim cv As ICollectionView = CollectionViewSource.GetDefaultView(dgMyDataGrid.ItemsSource)
    cv.SortDescriptions.Clear()
    cv.SortDescriptions.Add(New SortDescription("iOrderNum", ListSortDirection.Ascending))
    cv.Refresh()
    

    【讨论】:

    • 感谢您的回复,但我不确定这是否能解决我的问题。我试图让 DataGrid 使用其内置的排序功能,以便用户可以单击列标题进行排序。如果我错误地假设这不会那样做,我深表歉意。无论如何,我应该更具体。
    • 当我希望它保留以前应用的排序时,这实际上帮助我修复了定期刷新的 DataGrid 上的排序。
    【解决方案2】:

    在今天花了几个小时后,我几乎在发布问题后立即自己找到了答案。

    我不得不改变:

    column.SortMemberPath = "DisplayString";
    

    收件人:

    column.SortMemberPath = "Cells[" + departmentColumn.Ordinal.ToString() + "].DisplayString";
    

    我猜 SortMemberPath 并不总是自动绑定到当前数据项。

    感谢任何已经开始从事此工作的人。

    【讨论】:

      【解决方案3】:

      根据 MSDN 的 DataGridColumn.SortMemberPath 属性页,SortMemberPath 属性集

      要排序的数据项成员的路径

      这会让我相信你应该设置这个属性除非你只想按你设置的那一列排序。

      【讨论】:

      • 感谢您调查此事,Sheridan。这是一个特定于实例的字段,这意味着您为每一列设置一次。无论如何,我通过包含完整路径解决了这个问题,而不是假设 DataGrid 将从当前绑定的数据项开始。
      猜你喜欢
      • 2011-09-27
      • 2013-12-31
      • 2011-09-04
      • 2016-04-29
      • 2010-11-29
      • 2012-11-04
      • 2013-04-09
      • 1970-01-01
      • 2015-05-13
      相关资源
      最近更新 更多