2012-12-27 11 views
7

Possiedo un Datatable con colonne denominate foldername, documentname. I dati, come di seguito:Ordinamento della tabella di dati per più colonne mediante C#

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

Come alphabetically sorta DocumentName basa su FolderName in .Net Framework 2.0.

Soluzione che abbiamo provato è sotto ma richiede troppo tempo in quanto contiene più di 1200000 record.

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

Si dice che queste informazioni sono ottenute dal Database, quindi perché non si fa la clausola ORDER BY nella query SQL? Altrimenti hai provato a utilizzare un DataView anziché un DataTable? –

risposta

2

Hai provato DataView.Sort?

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

Si sta dando un errore, ma sotto la risposta mi ha salvato. grazie – user1931665

38
 DataTable dt= new DataTable(); 

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

provare che fuori. Ordinerà prima per FolderName, quindi DocumentName.

Se è necessario inviarlo a un componente sullo schermo, è possibile fare lo stesso che si sta facendo con un DataTable.

+0

Grazie mille, ha funzionato. Per una semplice linea di codice, ho scritto un codice stupido – user1931665

+1

Non dimenticarti di votare e contrassegnare come risposta corretta. Questo ci stimola ad aiutare sempre di più. –

+0

stange questo ans è utile per OP bt ancora ha segnato come asnwer – Neel

0

Se si sono vincolanti il ​​DGV utilizzando un DataTable, è possibile utilizzare fare qualcosa di simile:

DataTable dTable = (DataTable) dgv.DataSource; dtable.DefaultView.Sort =

In alternativa verificare questo:

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

grazie

1

Qui era la mia soluzione a questo problema:

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

È possibile utilizzare

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