【问题标题】:asp.net ListView sorting numericallyasp.net ListView 数字排序
【发布时间】:2012-06-17 21:01:18
【问题描述】:

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

对于文本来说很好,但对于数字来说就不那么好了。

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

如何得到正确的顺序?

我正在使用:

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

【问题讨论】:

  • 如果您使用 IEnumerable 数据源作为列表视图,您可以使用 LINQ 进行排序和重新绑定。
  • 那行不通 我原来是这样做的,但是发生了这个错误:数据源“reportObjectDataSource”不支持使用 IEnumerable 数据进行排序。只有 DataView、DataTable 和 DataSet 支持自动排序,因此 DataTable 允许排序。

标签: c# asp.net listview sorting datatable


【解决方案1】:

您可能不得不自己进行排序,而不是依赖 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;
}

【讨论】:

  • 我对 e.SortExpression 不熟悉;上面的表达。设置 OnSorting="lvPos_Sorting" 时是否会调用 lvPos_Sorting? e.SortExpression 在哪里定义? aspx 页面?
  • 我的错。 e.sortExpression 应该是 args.sortExpression。我已经进行了适当的编辑。是的,如果您将 OnSorting="lvPos_Sorting" 放入列表视图控件的标记中,则会调用 lvPos_Sorting。 SortExpression 是 ListViewSortEventArgs 的成员。
【解决方案2】:

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

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

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

See here

【讨论】:

    猜你喜欢
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    相关资源
    最近更新 更多