2012-09-18 18 views
13

traté de ordenar una tabla de datos con las siguientes dos manerasOrdenar una tabla de datos

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

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

Pero ninguno de ellos no se trabajaba. Siempre muestra los datos en el orden original. ¿Tienes alguna idea para resolver el problema?

Respuesta

20

Después de ajustar la expresión de ordenación en el DefaultView (table.DefaultView.Sort = "Town ASC, Cutomer ASC") debe bucle sobre la mesa con el DefaultView no la instancia de DataTable sí

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

Utilizando el método Select del objeto DataTable en cambio, produce una serie de DataRow . Esta matriz se clasifica como de su solicitud, no el DataTable

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

Funcionó. Gracias por su ayuda. – 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

Prueba esto:

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

Bueno, pero debe advertir que este método crea una tabla de datos duplicada, y si la original es grande, esto no es muy eficiente – Steve

13

Este era el camino más corto que pude encontrar para ordenar un DataTable sin tener que crear ninguna nueva variables.

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

Dónde:

ASC - Ascendente

DESC - descendente

ColumnName - La columna que desea ordenar por

DataTable - La tabla que desea ordenar

+0

La mejor solución para mí aquí. Funciona rápido, en realidad lo he incorporado para facilitar las consultas a la base de datos y realizar la clasificación del lado del cliente. Para agregar, ordene múltiples columnas separadas por una coma, es decir: "Col1 ASC, Col2 DESC, Col3 ASC" – dya

Cuestiones relacionadas