排序和搜索数据表

时间:2013-03-06 19:43:12

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

我有一个数据表,它已被代码绑定到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,但这似乎不适用于我的情况。

任何人都可以建议我如何排序一个/多个列?

此外,我想要一个文本框,它将搜索Name列。我认为上述内容应该足够了,但如果没有,有人会把我放在正确的轨道上,这样我就可以朝着这个方向努力,而不是必须改变我在后期做的事情吗?

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

如何使用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

希望这有帮助。