2011-09-27 39 views
4

我有一些數字代碼存儲在DataTable中。當我嘗試使用DataView對它進行排序時,它按字符串對列進行排序。將數據按整數/數字排序的最簡單方法是什麼?使用c將數據表中的字符串項目整理爲int#

DataView view = dt.DefaultView(); 
view.Sort = "Code asc"; 
dt = view.ToTable(); 

數據中的數據表: 128,123,112,12,126

後排序它表明: 112,12,123,126,128

預期的結果: 12, 112,123,126,128

回答

10

這裏是工作示例。您可以通過克隆創建另一個DataTable,並將列的數據類型更改爲Int並複製數據。

DataTable dt = GetTable(); // Assume this method returns the datatable from service  
    DataTable dt2 = dt.Clone(); 
    dt2.Columns["Code"].DataType = Type.GetType("System.Int32"); 

    foreach (DataRow dr in dt.Rows) 
    { 
     dt2.ImportRow(dr); 
    } 
    dt2.AcceptChanges(); 
    DataView dv = dt2.DefaultView; 
    dv.Sort = "Code ASC"; 
+1

啊哈!我現在得到它..感謝這個解決方案。 –

2

當創建在數據表中的列,將它定義爲typeof運算(INT)

dt.Columns.Add("Code", typeof(int)); 
+0

嗯,在我的代碼,我調用返回我DataTable中的web服務,我只是做'DataTable的DT = soaRequest.GetMasterList();'。 –

+0

試試這個 dt.Columns [「Code」] .DataType = Type.GetType(「System.Int32」); – SaQiB

0

一個選項是添加一個計算列與正確的類型和排序。

像這樣:

dt.Columns.Add("Int32_Code", typeof(int), "Code"); 
dt.DefaultView.Sort("Int32_Code"); 
dt = dt.DefaultView.ToTable();