【问题标题】:Sort and Search Datatable排序和搜索数据表
【发布时间】:2013-03-06 19:43:11
【问题描述】:

我有一个数据表,它在后面的代码中已绑定到 Gridview。这意味着我必须在后面的代码中对列进行排序,并且在搜索记录时,我想这也将在后面的代码中完成。

我必须对gridview进行排序的代码是

Private Function GetCustData As Datatable
Dim dt as new datatable

dt = GetDataFromBusinessLayer(CustomerID)
Return dt

End Function

以及要排序的代码

Private Sub gv_Sorting(sender As Object, e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles gv.Sorting
    If e.SortExpression = "Name" 
        gv.DataSource = GetCustData '.DefaultView.Sort = "Name" & "DESC"
        gv.DataBind()
    End If
End Sub

如您所知,我尝试使用 .DefaultView.Sort = "Name" & "DESC" 但这不起作用并得到错误 数据源是无效类型。它必须是 IListSource、IEnumerable 或 IDataSource。搜索大多数都在使用 Viewstate,但这似乎不适用于我的情况。

谁能告诉我如何对一列/多列进行排序?

此外,我希望有一个用于搜索名称列的文本框。我认为上述内容就足够了,但如果没有的话,有人可以让我走上正确的道路,这样我现在就可以朝着这个方向努力,而不必在以后改变我正在做的事情?

【问题讨论】:

    标签: c# .net vb.net gridview datatable


    【解决方案1】:

    首先,您当前的代码没有空格。要按名称 DESC 排序,您的排序字符串需要是:“名称 DESC”。

    要将排序字符串设置为多列,只需在每列之间添加一个逗号,如下所示:

    Dim dt as new datatable = GetCustData(1)
    dt.DefaultView.Sort = "Name DESC, FirstName ASC"
    gv.DataSource = dt.DefaultView
    gv.DataBind()
    

    【讨论】:

    • 谢谢。当我在 gv 排序事件下有代码时......处理 gv.Sorting If e.SortExpression = "ID" Then GetCustData(1).DefaultView.Sort = "ID DESC" gv.DataSource = GetCustData(1).DefaultView gv .DataBind() End If That没有显示错误但同时它不起作用?
    • @Computer - GetCustData 方法每次都调用数据库。当您第二次调用它时 (gv.DataSource = GetCustData(1).DefaultView),您将删除前面行中设置的排序。我将更新我的代码示例,使其更像您所指的内容。
    【解决方案2】:

    我认为你可以创建一个行列表

    List<DataRow> list = dt.AsEnumerable().ToList();
    

    然后当你有一个列表时,你现在可以使用排序

    list.OrederBy(c=>c.///specific value in your list)
    

    【讨论】:

      【解决方案3】:

      使用Linq 为您进行排序怎么样。

      Dim dt as new datatable
      
      dt = From dr as Datarow in GetDataFromBusinessLayer(CustomerID)
           Order by dr.item("First Sort field), dr.Item("Second Sort Field")
           Select dr
      
      Return dt
      

      ...我在没有 IDE 的情况下执行此操作,但我相信这应该可以解决问题。

      这是一个在线示例 - Sorting DataTable with Linq

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-21
        • 2016-03-26
        • 1970-01-01
        • 2019-01-04
        • 1970-01-01
        • 2020-08-13
        相关资源
        最近更新 更多