2012-12-27 10 views
7

foldername,documentnameという名前の列を持つデータテーブルがあります。以下のようにデータ:.Net Framework 2.0にフォルダ名に基づいて、どのようにalphabeticallyソートDOCUMENTNAMEC#を使用して複数の列でデータテーブルをソート

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

私たちが試した解決策は以下のとおりですが、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句を使用しないのですか?それ以外の場合は、DataTableではなくDataViewを使用してみましたか? –

答えて

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で行っているのと同じ操作を行うことができます。あなたがデータテーブルを使用してDGVを結合している場合

+0

ありがとう、それは働いた。コードの単純な行のために、私は愚かなコードの地獄を書いた – user1931665

+1

upvoteと正しい答えとしてマークすることを忘れないでください。それは私たちがますます助けてくれると推測しています。 –

+0

このステートメントは、まだOPとして表示されていません。まだ表示されていません。 – Neel

0

、あなたのような何かを使用することができます。

のDataTable dtable =(DataTableの)dgv.DataSourceを。ここで

0

あなたは

を使用することができます dtable.DefaultView.Sort =

はまたこれをチェック

oDataSet.Tables[0].DefaultView.Sort = "Column1 ASC "; 
関連する問題