2012-12-27 3 views
7

Ich habe ein Datatable mit Spalten mit den Namen foldername, documentname. Daten wie folgt:Sortieren der Datentabelle durch mehrere Spalten mit C#

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

Wie alphabetically Art Document basierend auf Ordner in .Net Framework 2.0.

Lösung, die wir versucht haben, ist unten, aber dauert zu viel Zeit, da es mehr als 1200000 Datensätze enthält.

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

Sie erwähnen, dass diese Informationen von der Datenbank erhalten werden, warum also nicht die ORDER BY-Klausel in der SQL-Abfrage? Hast du sonst versucht, eine DataView anstelle einer DataTable zu verwenden? –

Antwort

2

Haben Sie DataView.Sort ausprobiert?

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

Es gibt einen Fehler, aber unterhalb der Antwort gespeichert mich. danke – user1931665

38
 DataTable dt= new DataTable(); 

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

dass ausprobieren. Es wird zuerst nach FolderName und dann nach DocumentName sortiert.

Wenn Sie das an eine Komponente auf dem Bildschirm senden müssen, können Sie das Gleiche tun wie mit einer DataTable.

+0

Vielen Dank, es hat funktioniert. Für eine einfache Zeile der Codierung, schrieb ich eine Hölle von dumm Code – user1931665

+1

Vergessen Sie nicht, upvote und markieren Sie als richtige Antwort. Das schätzt uns, immer mehr zu helfen. –

+0

stange this ans ist nützlich für OP bt immer noch markiert als asnwer – Neel

0

Wenn Sie die dgv mit einer Datentabelle verbindlich sind, können Sie so etwas wie verwenden tun:

Datatable dTabelle = (Datatable) dgv.DataSource; dtable.DefaultView.Sort =

Alternativ dies überprüfen:

http://www.codeproject.com/csharp/datagridsort.asp

dank

1

Hier war meine Lösung für dieses Problem:

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

können Sie verwenden

oDataSet.Tables[0].DefaultView.Sort = "Column1 ASC ";