我有一个绑定到 DataTable 源的列表视图。排序工作,有点。
对于文本很好,但对于数字则不然。
例如,如果我对 1-12 进行降序排序,我得到 9,8,7,6,5,4,3,2,12,11,10,1。
如何获得正确的顺序?
我在用:
lvPos.Sort("Position", SortDirection.Descending);
您可能不得不自己进行排序,而不是依赖 ListView 的排序方法。
如果您仅使用代码进行排序,这非常容易。只需将您的 DataTable 推入 DataView 并使用 DataView 的 Sort 方法。然后绑定到您的 DataView 而不是您的 DataTable。
var view = new DataView(dtTable);
view.Sort = "Position"; //or "Position DESC"
lvPos.DataSource = view;
lvPos.DataBind(); //use lvPos.DataBind(true) to raise the "OnDataBinding" event.
如果您从 ListView 的排序方法进行排序(即,您在页面中有触发 ListView.Sorting/Sorted 事件的内容),那么您将不得不连接到 Sorting 事件并取消它。跟进之前将 DataTable 推入 DataView 的技术(或重新使用 DataView!),按新表达式排序,然后重新绑定数据。
private void lvPos_Sorting(object sender, ListViewSortEventArgs args)
{
var view = new DataView(dtTable);
view.Sort = args.SortExpression;
lvPos.DataSource = view;
lvPos.DataBind();
args.Cancel = true;
}
像这样实际设置数据类型的最简单方法:
table.Columns[0].DataType = System.Type.GetType("System.Int32");
现在排序实际上按值将项目排序为整数,而不是字符串。