2012-12-27 21 views
7

Mam DataCable z kolumnami o nazwie foldername, documentname. Dane jak poniżej:Sortowanie tabeli danych według wielu kolumn przy użyciu C#

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

Jak alphabetically rodzaj DocumentName podstawie NazwaFolderu w .Net Framework 2.0.

Rozwiązanie, które próbowaliśmy, jest poniżej, ale zajmuje zbyt wiele czasu, ponieważ zawiera ponad 1200000 rekordów.

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

Wspomniałeś, że te informacje pochodzą z bazy danych, więc dlaczego nie robisz klauzuli ORDER BY w zapytaniu SQL? W przeciwnym razie próbowałeś używać DataView zamiast DataTable? –

Odpowiedz

2

Czy próbowałeś DataView.Sort?

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

Daje błąd, ale odpowiedź poniżej uratowała mnie. dzięki – user1931665

38
 DataTable dt= new DataTable(); 

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

Spróbuj że na zewnątrz. Najpierw zostanie posortowane według FolderName, a następnie DocumentName.

Jeśli chcesz wysłać to do komponentu na ekranie, możesz zrobić to samo, co robisz z DataTable.

+0

Wielkie dzięki, zadziałało. Dla prostej linii kodowania napisałem piekielnie głupi kod – user1931665

+1

Nie zapomnij o awansie i oznaczyć jako poprawną odpowiedź. To nas szacuje, abyśmy pomagali coraz więcej. –

+0

oznaczyć to i jest przydatne dla OP bt nadal oznaczony jako asnwer – Neel

1

Tu było moje rozwiązanie tego problemu:

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

Można użyć

oDataSet.Tables[0].DefaultView.Sort = "Column1 ASC "; 
Powiązane problemy