【问题标题】:How do I do a Client side sort of a DataTable using LINQ如何使用 LINQ 对 DataTable 进行客户端排序
【发布时间】:2009-12-30 16:11:04
【问题描述】:

如何使用 LINQ 在客户端对 DataTable 进行排序? (我的数据存储不支持服务器端排序)

我正在做这样的事情,但它不起作用

IEnumerable<DataRow> dr = GetDataTableData().AsEnumerable();

           if (sortDirection == "Ascending")
                        {
                            dr = dr.OrderBy(x => sortExpression);
                        }
                        else
                        {
                            dr = dr.OrderByDescending(x => sortExpression);
                        }

                GridView1.DataSource = dr;
                GridView1.DataBind();

但我根本看不到 gridview 排序,我在这里缺少什么?

【问题讨论】:

  • 澄清一下:您说的是WebForms,对吧?
  • 在什么情况下不起作用?更多细节,请。
  • @chris GridView 用于排序的表达式,当您单击 gridview 列时,它会返回该列的名称(e.SortExpression)@jeff yes
  • @Jay 我在 GridView 上没有看到任何排序

标签: linq gridview sorting datatable


【解决方案1】:

我的猜测是 sortExpression 是您传递给方法的字符串;您应该对 x 中的某些内容进行排序。例如:

dr = dr.OrderBy(x => x.FirstName);

正如 Rory 在 cmets 中指出的那样,您可以只使用 x[sortExpression] ;如果您使用对象而不是 DataRow,则可以创建一个键选择器表达式并将其传递给 OrderBy();类似:

Func<IDataRow, string> sortExpressionReal = x => x["FirstName"].ToString();

那么您的 OrderBy 将如下所示:

dr = dr.OrderBy(sortExpressionReal);

【讨论】:

  • 是的,sortExpression 是用户单击的网格标题,例如:“FirstName”,如何将其映射到 X.FirstName?
  • 您可以只使用 linq 数据源,让框架为您处理。否则,您必须从传入事件的值编写自己的映射。
  • 由于 x 是 DataRow 实例,您可以使用“x[sortExpression]”或“x.Field(sortExpression)”。您需要导入 System.Data.Linq 命名空间才能使用第二个版本,如果字段包含不同的数据类型,TypeOfField 可能会出现问题,第一个选项最简单,因为它将所有内容都视为对象。
  • 好吧,我试过了:dr = dr.OrderBy(x => x[sortExpression]);没用...仍然得到未排序的数据
  • 最快/最简单的方法是确保在 Page_PreRender() 中仅在 !IsPostback 时绑定网格视图。或者,您可以在 Page_PreRender 中绑定已排序的列表并更改 GridView_Sort(),这样无需绑定,只需设置几个属性,以便 PreRender 知道如何对数据进行排序。
【解决方案2】:

你必须使用 linq。您可以使用 DataViews 轻松完成此操作 DataView vw = new DataView(dtbl,"filter","FirstName DESC",DataViewRowState.CurrentRows); GridView1.DataSource=vw; GridView1.DataBind();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2011-11-11
    • 2012-09-01
    • 1970-01-01
    • 2014-11-10
    • 2010-10-29
    相关资源
    最近更新 更多