C# WPF DataGrid-使用DataTable作为ItemsSource进行自定义排序
使用DataGrid,我显示一个DataTable,其中包含运行时生成的内容。因此,我不能使用预定义的列。每行包含一个名称作为其第一个元素,然后是一个可变数量的数据,这些数据通常是数字,但也可能是C# WPF DataGrid-使用DataTable作为ItemsSource进行自定义排序,c#,wpf,datatable,datagrid,icomparable,C#,Wpf,Datatable,Datagrid,Icomparable,使用DataGrid,我显示一个DataTable,其中包含运行时生成的内容。因此,我不能使用预定义的列。每行包含一个名称作为其第一个元素,然后是一个可变数量的数据,这些数据通常是数字,但也可能是null或字符串“Invalid” 目前,所有数据都被解释为字符串,这导致问题是对列进行排序会产生字母顺序,而不是数字顺序,例如“0,1,12,20,3”而不是“0,1,3,12,20”。我试图通过从IComparable(DataGrid会忽略)继承所有显示的数据,或者覆盖DataGrid的OnSor
null
或字符串“Invalid”
目前,所有数据都被解释为字符串,这导致问题是对列进行排序会产生字母顺序,而不是数字顺序,例如“0,1,12,20,3”而不是“0,1,3,12,20”。我试图通过从IComparable
(DataGrid会忽略)继承所有显示的数据,或者覆盖DataGrid的OnSorting()
方法来解决这个问题(我只找到假定我使用的是ListCollectionView而不是DataTables的源)
有人知道如何在绑定到运行时生成的DataTable的DataGrid上实现自定义排序行为吗?我会使用DataTable,而不是篡改DataGrid 如果无法对DataTable的源执行任何操作,则可以使用DataView获取DataTable的排序视图(请参见DataView.Sort) 将DataView绑定到DataGrid 添加一个额外的列,并使用DataColumn.Expression将字符串值转换为数值,并处理空值和无效值 请参见此处的示例:
尝试添加具有整数排序值的列,并为此列设置
DataGridColumn.SortMemberPath
。另外,请花一分钟时间阅读。