我正在使用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不正确地显示或使用任何其他数据,我没有任何问题,因此我感到难倒了。为什么排序只考虑第一列中的文本,而其他所有内容都绑定到相应列中的数据?
这就是我对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
属性设置
用于排序的数据项成员的路径
这会使我相信,除非您只想按您将其设置为的一列进行排序,否则不应该设置此属性。