提问者:小点点

VS2010 WPF DataGrid排序不正确


我正在使用WPF DataGrid,它带有过程(C#,VS2010)生成的,绑定的列,并且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不正确地显示或使用任何其他数据,我没有任何问题,因此我感到难倒了。为什么排序只考虑第一列中的文本,而其他所有内容都绑定到相应列中的数据?


共3个答案

匿名用户

这就是我对datagrid排序的方式,也许它会有帮助

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

匿名用户

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

我不得不改变:

column.SortMemberPath = "DisplayString";

致:

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

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

我要感谢所有已经开始做这件事的人。

匿名用户

根据MSDN上的DataGridColumn.SortMemberPath属性页,SortMemberPath属性设置

用于排序的数据项成员的路径

这会使我相信,除非您只想按您将其设置为的一列进行排序,否则不应该设置此属性。