0

我有一个绑定到 DataTable 源的列表视图。排序工作,有点。

对于文本很好,但对于数字则不然。

例如,如果我对 1-12 进行降序排序,我得到 9,8,7,6,5,4,3,2,12,11,10,1。

如何获得正确的顺序?

我在用:

lvPos.Sort("Position", SortDirection.Descending);
4

2 回答 2

0

您可能不得不自己进行排序,而不是依赖 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;
}
于 2012-06-14T19:18:49.133 回答
0

像这样实际设置数据类型的最简单方法:

table.Columns[0].DataType = System.Type.GetType("System.Int32");

现在排序实际上按值将项目排序为整数,而不是字符串。

看这里

于 2012-06-14T21:51:17.407 回答