2009-06-10 52 views
0

到目前为止,我有一个linq查询,它使用filterconditions完美填充数据网格。然而,当我尝试实施排序我失败了。ASP.net gridview使用linq结果排序

我有以下代码。它捕捉到了排序的开始。

protected void gvServers_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    if (e.SortDirection == SortDirection.Ascending) 
    { 
     SortDataAsc(e.SortExpression); 
    } 
    else if (e.SortDirection == SortDirection.Descending) 
    { 
     SortDataDesc(e.SortExpression); 
    } 
} 

在这些子方法中,我想要排列每个可能的排序表达式的排序。 然而,当我尝试使用已经在GridView中的数据也不会允许我用一个排序依据LINQ它

private void SortDataAsc(string p) 
{ 
    var data = gvServers.DataSource; 
    switch (p) 
    { 
     case "domain": 
      var sorted = data.nothinghappenshere 
     default: 
      break; 
    } 
} 

,你可以看到指向nothinghappenshere我不能对数据进行排序(proabaly因为它是一个变种)。

我在网上阅读的是,您可以从gridview中获取数据,就像我在SortDataAsc()中所做的那样,但似乎并不是那样工作的。

我只是想通过某一个领域在我的ResultSet命令(在这种情况下,从连接派生的匿名类)

回答

1

嗯,这是因为DataSource是弱类型。

如果你把它投到IEnumerable<YourDataType>它应该没问题。但是请注意,OrderByOrderByDescending未排序 - 您必须订购数据,然后重新指定DataSource

你说你的数据类型是一个匿名类型 - 恐怕你必须改变它。匿名类型只能(很容易)以强类型方式在单一方法中使用 - 以后不能指定名称,因此不能引用相同的属性等。

这并不是很难转换一个匿名类型到一个命名的一个虽然。 Here's an answer giving an example.

+0

正如我上面提到的那样,没有数据类型来键入它。结果是我使用select {}获取我需要的所有内容的连接... – 2009-06-10 13:53:39