我正在使用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显示或使用不正确的任何其他数据没有任何问题,所以我很难过。为什么排序只考虑第一列中的文本,当其他所有内容都绑定到相应列的数据时?
答案 0 :(得分:2)
这是我对数据网格进行排序的方式,也许它会有所帮助
Dim cv As ICollectionView = CollectionViewSource.GetDefaultView(dgMyDataGrid.ItemsSource)
cv.SortDescriptions.Clear()
cv.SortDescriptions.Add(New SortDescription("iOrderNum", ListSortDirection.Ascending))
cv.Refresh()
答案 1 :(得分:0)
今天花了几个小时后,我在发布问题后几乎立即找到答案。
我不得不改变:
column.SortMemberPath = "DisplayString";
要:
column.SortMemberPath = "Cells[" + departmentColumn.Ordinal.ToString() + "].DisplayString";
我猜SortMemberPath并不总是自动绑定到当前数据项。
感谢所有已经开始研究的人。
答案 2 :(得分:0)
根据MSDN的DataGridColumn.SortMemberPath属性页面,SortMemberPath
属性集
要按
排序的数据项成员的路径
这会让我相信你应该不设置此属性,除非你只想按照你设置它的一列进行排序。