2012-12-27 41 views
7

我有一個名爲foldernamedocumentname的列的Datatable。數據如下:使用C#對多列進行數據表排序

FolderName DocumentName 
Folder1  HR[D] Document 
Folder1  ___----' 
Folder1  Asp_example.pdf 
Folder2  SD 
Folder3  Heavy_weight 
Folder3  Accesorial Services 

如何alphabetically排序DocumentName在.Net Framework 2.0基於文件夾名稱。

我們試過的解決方案是在下面,但是它佔用了太多的時間,因爲它包含了超過1200000條記錄。

int counter=0; 

while (counter < searchDT.Rows.Count){ 
    string FolderName = Convert.ToString(searchDT.Rows[counter]["Folder Name"]); 

    string exp = "[Folder Name] like '" + FolderName + "'"; 

    if (FolderName.Contains("%") || FolderName.Contains("_") || FolderName.Contains("[]") ||  FolderName.Contains("'")) 

     exp = "[Folder Name] like '" + EscapeLikeValue(FolderName) + "'"; 

    string sortExpression = "[Document Name] ASC"; 

    DataRow[] drfoldername = searchDT.Select(exp, sortExpression); 

    foreach (DataRow row in drfoldername) 
    drfoldernameDT.ImportRow(row); 

    counter += drfoldername.Length; 

} 
+1

你提到這個信息是從數據庫中獲得的,那麼你爲什麼不在SQL查詢中執行ORDER BY子句?否則,你是否嘗試過使用DataView而不是DataTable? –

回答

2

您是否試過DataView.Sort?

dt.DefaultView.RowFilter = "FolderName , DocumentName ASC"; 
dt = dt.DefaultView.ToTable(); 
+0

它給出了一個錯誤,但下面的答案救了我。謝謝 – user1931665

38
 DataTable dt= new DataTable(); 

     DataView dv = new DataView(dt); 
     dv.Sort = "FolderName, DocumentName ASC"; 

嘗試了這一點。它將首先爲FolderName,然後是DocumentName排序。

如果您需要將它發送到屏幕上的組件,您可以像使用DataTable一樣進行操作。

+0

非常感謝,它的工作。對於一個簡單的編碼行,我寫了一個愚蠢的代碼地獄 – user1931665

+1

不要忘記upvote和標記爲正確的答案。這預計我們會越來越多地提供幫助。 –

+0

stange這個ans是有用的OP bt仍然havnt標記爲asnwer – Neel

1

這裏是我解決這個問題:

Datatable FI = new Datatable(); 
DataView viewFI = new DataView(FI); 
viewFI.Sort = "ServiceDate, ServiceRoute"; 
DataTable OFI= viewFI.ToTable(); 
0

您可以使用

oDataSet.Tables[0].DefaultView.Sort = "Column1 ASC "; 
相關問題