2011-02-15 64 views
66

我需要在內存中根據來自GridView的列和方向使用DataTable。該功能需要如下所示:如何對給定列和方向的DataTable進行排序?

public static DataTable resort(DataTable dt, string colName, string direction) 
{ 
    DataTable dtOut = null; 

    .... 
} 

我需要填寫此功能的幫助。我想我可以使用Select語句,但我不知道如何。我無法點擊評論,因爲這個瀏覽器,但你可以給我一個就地或新的DataTable解決方案,任何一個。對於向我展示指針的人們,我需要一個類似於原型的編碼函數。

如何:

// ds.Tables[0].DefaultView.Sort="au_fname DESC"; 
    public static void Resort(ref DataTable dt, string colName, string direction) 
    { 
     string sortExpression = string.Format("{0} {1}", colName, direction); 
     dt.DefaultView.Sort = sortExpression; 
    } 

回答

4

創建數據視圖。您無法直接對DataTable進行排序,但可以從DataTable創建DataView並對其進行排序。

創建:http://msdn.microsoft.com/en-us/library/hy5b8exc.aspx

排序:http://msdn.microsoft.com/en-us/library/13wb36xf.aspx

下面的代碼示例創建一個視圖,示出了所有的產品 其中的庫存單元的數量小於或等於所述 重新排序電平,首先按供應商ID排序,然後按產品名稱排序。

DataView prodView = new DataView(prodDS.Tables["Products"], "UnitsInStock <= ReorderLevel", "SupplierID, ProductName", DataViewRowState.CurrentRows);

+0

損壞的鏈接排序中... 。 – Ash 2013-09-27 12:13:49

+1

已更新的回答。謝謝。 – 2013-09-27 13:09:38

7

數據表有一個重載的Select方法,您可以爲您做到這一點。請參閱:http://msdn.microsoft.com/en-us/library/way3dy9w.aspx

但是,Select調用的返回值不是DataTable,而是RowData對象的數組。如果你想從你的函數返回一個DataTable,你將不得不從頭開始基於這個數據數組來構建它。下面是地址,並提供了這兩個問題樣本後:http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/157a4a0f-1324-4301-9725-3def95de2bf2/

60

如果你只得到了一個數據視圖,您可以排序使用來代替:

table.DefaultView.Sort = "columnName asc"; 

還沒有嘗試過,但我你可以用任意數量的DataView來做到這一點,只要你參考了正確的一個。

+0

太棒了!這個解決方案的工作原理比所有這些自定義排序方法都容易10倍 – user1985189 2013-03-05 19:09:07

101

我認爲的 「方向」 爲 「ASC」 或 「DESC」 和DT包含一個名爲 「COLNAME」 列

public static DataTable resort(DataTable dt, string colName, string direction) 
{ 
    DataTable dtOut = null; 
    dt.DefaultView.Sort = colName + " " + direction; 
    dtOut = dt.DefaultView.ToTable(); 
    return dtOut; 
} 

或不產生dtOut

public static DataTable resort(DataTable dt, string colName, string direction) 
{ 
    dt.DefaultView.Sort = colName + " " + direction; 
    dt = dt.DefaultView.ToTable(); 
    return dt; 
} 
12

實際上得到了同樣的問題。對我來說,工作這麼簡單的方法:

的數據添加到一個Datatable和排序是:

dt.DefaultView.Sort = "columnname"; 
dt = dt.DefaultView.ToTable(); 
2

如果你要多於一個方向

public static void sortOutputTable(ref DataTable output) 
     { 
      DataView dv = output.DefaultView; 
      dv.Sort = "specialCode ASC, otherCode DESC"; 
      DataTable sortedDT = dv.ToTable(); 
      output = sortedDT; 
     } 
相關問題