2009-06-10 78 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