数据源不支持排序



我在VB.NET中有一个动态数据LINQ to SQL ASP.Net网站,我在实现GridView的排序和搜索例程时遇到了一些小麻烦。在Page_Load上,GridView按字段(Departments.department)的ASC顺序进行排序。然而,当我使用下面的代码进行搜索时,我得到了一个错误

数据源不支持排序。

我假设,由于DataSource/ID的原因,当Page_Load事件在进行搜索后尝试对数据进行排序时,问题就会出现。

Dim button = DirectCast(sender, Button)
If button.ID = btnMultiColumnSearchClear.ID Then
    txbMultiColumnSearch.Text = [String].Empty
Else
    Using Data As New wcPhonesDataContext()
        Dim EmployeeNameString As String = txbMultiColumnSearch.Text
        Dim SearchResults = Data.Employees.Where(Function(Employees) Employees.Employee.Contains(EmployeeNameString))
        GridView1.DataSourceID = ""
        GridView1.DataSource = SearchResults
        GridView1.DataBind()
    End Using
End If

已解决,但现在我有一个新问题,这是我用来解决此问题的代码。。。

    Dim button = DirectCast(sender, Button)
    If button.ID = btnMultiColumnSearchClear.ID Then
        txbMultiColumnSearch.Text = [String].Empty
    Else
        Using Data As New wcPhonesDataContext()
            Dim EmployeeNameString As String = txbMultiColumnSearch.Text
            Dim SearchResults = Data.Employees.Where(Function(Employees) Employees.Employee.Contains(EmployeeNameString))
            GridView1.Sort("", SortDirection.Ascending)
            GridView1.DataSourceID = ""
            GridView1.DataSource = SearchResults
            GridView1.DataBind()
        End Using
    End If

不过,我创建了一个新错误。如果我在不返回Employees表的情况下执行第二次搜索,就会发生这种情况。

'GridView1'触发了未处理的事件Sorting

如果使用SqlDataSource并使用datasourceid将网格视图连接到数据源,那么排序就神奇地完成了。你不需要做任何事情来支持它。

但是,如果将数据源设置为您在代码中创建的某个对象,排序就不会神奇地发生。当用户单击列标题时,将触发一个OnSorting事件。您必须编写代码来处理该事件。通常,这意味着按照所需顺序重新生成数据,或者重新生成数据然后对其进行排序

例如,如果您使用SQL查询生成数据,我有时会创建一个函数来运行SQL查询并返回数据集。此函数将排序字段作为参数,并将其粘贴到SQL查询中。然后,对于初始显示调用,此函数按默认排序顺序传递,对于OnSorting调用,此功能按所需排序字段传递。

最新更新