2013-07-11 58 views
1

我有一个动态数据LINQ to SQL ASP.Net网站在VB.NET,并有排序我的GridView和搜索例程我已经实施。在Page_Load上,GridView按照ASC的顺序按字段(Departments.department)排序。然而,当我使用下面的代码执行搜索时,出现错误该数据源不支持排序

数据源不支持排序。

我假设的问题出现时的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'触发了未处理的事件排序。

+0

您是否曾尝试在重新分配查询之前将数据源设置为Nothing? – OneFineDay

+0

我可以通过清除DGV排序来解决该问题,但是现在如果我执行第二次搜索而不回到Employees表,则会出现上述错误。 – cwnOnTheHill

回答

1

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

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

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

+0

周杰伦,谢谢你的评论。我看过你的SqlDataSource建议。我的问题是,这是一个使用LINQ to SQL的动态数据站点,所以我没有实际编写任何SQL查询,这些都是在幕后完成的,并且GridView在运行时动态填充。这个网站的唯一功能我实际上是为自己编写的代码是这个搜索功能,根据你的说法,打破了“魔术”排序。它在第一次搜索完成,第二次搜索,或者点击清除,打破它时都可以正常工作。我可能需要一个“解决方法”,比我需要一个“修复”更多 – cwnOnTheHill

+0

杰伊,我想了解更多关于你的建议与我已经完成的一些Google搜索有多相似的事情,并且嘿嘿,我会给它一个镜头,而BINGO , 有效。我原以为这需要很多编码,我不是特别想要解决的,但它就像你说的那样容易,所以谢谢你! – cwnOnTheHill

+0

就我个人而言,我曾经做过很多SqlDataSource来获得免费的排序。但是我正在摆脱这种情况,因为我发现了很多情况,我发现我必须将SqlDataSource转换为代码创建的东西,因此我必须重新修改所有内容。所以,现在我经常咬紧牙关,只是在代码中开始。你或许可以无休止地辩论这一点。 – Jay

相关问题