数据源不支持排序

时间:2013-07-11 14:03:56

标签: sql vb.net linq

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

  

数据源不支持排序。

我假设问题出现在Page_Load事件在搜索完成后尝试对数据进行排序时,因为DataSource/ID

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'触发了未处理的事件排序。

1 个答案:

答案 0 :(得分:1)

如果您使用SqlDataSource并使用datasourceid将gridview连接到数据源,那么将神奇地为您完成排序。您无需做任何事情来支持它。

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

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