2012-09-18 21 views
13

ho cercato di ordinare una tabella di dati con i seguenti due modiOrdinamento una tabella di dati

table.DefaultView.Sort = "Town ASC, Cutomer ASC" 

table.Select("", "Town ASC, Cutomer ASC") 

Ma nessuno di loro non è stato lavorato. Visualizza sempre i dati nell'ordine originale. Hai qualche idea per risolvere il problema.

risposta

20

Dopo aver impostato l'espressione di ordinamento sul DefaultView (table.DefaultView.Sort = "Town ASC, Cutomer ASC") si dovrebbe anello sopra la tabella utilizzando il DefaultView non l'istanza DataTable stessa

foreach(DataRowView r in table.DefaultView) 
{ 
    //... here you get the rows in sorted order 
    Console.WriteLine(r["Town"].ToString()); 
} 

Utilizzando il metodo Select del DataTable invece, produce una matrice di DataRow . Questo array è ordinato come da vostra richiesta, non il DataTable

DataRow[] rowList = table.Select("", "Town ASC, Cutomer ASC"); 
foreach(DataRow r in rowList) 
{ 
    Console.WriteLine(r["Town"].ToString()); 
} 
+0

Ha funzionato. Grazie per il tuo aiuto – pasanmaduranga

0
private void SortDataTable(DataTable dt, string sort) 
{ 
DataTable newDT = dt.Clone(); 
int rowCount = dt.Rows.Count; 

DataRow[] foundRows = dt.Select(null, sort); 
// Sort with Column name 
for (int i = 0; i < rowCount; i++) 
{ 
object[] arr = new object[dt.Columns.Count]; 
for (int j = 0; j < dt.Columns.Count; j++) 
{ 
arr[j] = foundRows[i][j]; 
} 
DataRow data_row = newDT.NewRow(); 
data_row.ItemArray = arr; 
newDT.Rows.Add(data_row); 
} 

//clear the incoming dt 
dt.Rows.Clear(); 

for (int i = 0; i < newDT.Rows.Count; i++) 
{ 
object[] arr = new object[dt.Columns.Count]; 
for (int j = 0; j < dt.Columns.Count; j++) 
{ 
arr[j] = newDT.Rows[i][j]; 
} 

DataRow data_row = dt.NewRow(); 
data_row.ItemArray = arr; 
dt.Rows.Add(data_row); 
} 
} 
23

Prova questo:

Dim dataView As New DataView(table) 
dataView.Sort = " AutoID DESC, Name DESC" 
Dim dataTable AS DataTable = dataView.ToTable() 
+7

Buono, ma dovresti avvisare che questo metodo crea un datatable duplicato, e se quello originale è grande questo non è molto efficiente – Steve

13

questa era la via più breve che ho trovato per ordinare un DataTable senza dover creare ogni nuovo variabili.

DataTable.DefaultView.Sort = "ColumnName ASC" 
DataTable = DataTable.DefaultView.ToTable 

Dove:

ASC - Ascendente

DESC - Discendente

ColumnName - La colonna che si desidera ordinare

DataTable - La tabella si desidera ordinare

+0

La migliore soluzione per me proprio qui. Funziona velocemente, in realtà ho incorporato questo per facilitare le query del database ed eseguire l'ordinamento lato client. Per aggiungere, ordina più colonne separate da una virgola, ad es .: "Col1 ASC, Col2 DESC, Col3 ASC" – dya

Problemi correlati