2012-09-18 10 views
13

Ich habe versucht, eine Datentabelle zu sortieren mit zwei ArtenSortieren einer Datentabelle

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

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

Aber keiner von ihnen wurde nicht gearbeitet. Es zeigt immer Daten in der ursprünglichen Reihenfolge an. Haben Sie eine Idee, das Problem zu lösen?

Antwort

20

nach der Sortierung Ausdruck auf der Defaulteinstellung (table.DefaultView.Sort = "Town ASC, Cutomer ASC") Sie sollte eine Schleife über dem Tisch die Default nicht die Datentabelle Instanz mit sich

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

die Select-Methode des Datentabelle anstelle erzeugt ein Array von DataRow . Dieses Array wird als von Ihrer Anfrage sortiert, nicht die Datatable

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

Es hat funktioniert. Danke für Ihre Hilfe – 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

Try this:

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

Gut, aber Sie sollten darauf hinweisen, dass diese Methode eine duplizierte Datentabelle erstellt, und wenn die ursprüngliche groß ist, ist dies nicht sehr effizient – Steve

13

Das war der kürzeste Weg ich eine Datatable zu sortieren, ohne dass weder eine neue finden konnten, Variablen.

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

Wo:

ASC - aufsteigend

DESC - absteigend

Spaltenname - Die Spalte, die Sie von

Datatable sortieren wollen - die Tabelle, die Sie sortieren möchten

+0

Beste Lösung für mich hier. Funktioniert schnell, ich habe dies integriert, um Datenbankabfragen zu vereinfachen und clientseitig zu sortieren. Zum Hinzufügen sortieren Sie mehrere Spalten, die durch ein Komma getrennt sind, z. B .: "Col1 ASC, Col2 DESC, Col3 ASC" – dya

Verwandte Themen