0

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

谁能建议我如何对一列/多列进行排序?

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

4

3 回答 3

1

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

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

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

list.OrederBy(c=>c.///specific value in your list)
于 2013-03-06T19:51:03.613 回答
1

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

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

Dim dt as new datatable = GetCustData(1)
dt.DefaultView.Sort = "Name DESC, FirstName ASC"
gv.DataSource = dt.DefaultView
gv.DataBind()
于 2013-03-06T20:02:21.160 回答
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 的情况下做到了这一点,但我相信这应该可以解决问题。

这是一个在线示例 -使用 Linq 对数据表进行排序

希望这可以帮助。

于 2013-03-06T20:02:13.277 回答