Pregunta

Estoy confundido en DataTable.DefaultView.Sort. Aquí está el segmento del código en el que quiero usarlo.

actionLogDT.DefaultView.Sort = "StartDate";

foreach (CustomerService.ActionLogStartEndRow logRow in actionLogDT)
{
  // code here
}

Las muestras que he visto no usan el bucle foreach y, por lo tanto, me confunden sobre cómo procesar esto. No está ordenando como pensé que debería ser.

Veo que .DefaultView devuelve una vista y .Table da un error de compilación.

¿Fue útil?

Solución 3

Tuve que tomar un enfoque ligeramente diferente. Esta publicación fue la más cercana que pude encontrar para que mi código funcionara. Aquí está el resultado de trabajo:

actionLogDT.DefaultView.Sort = "StartDate";
DataView dv = actionLogDT.DefaultView;

foreach (DataRowView logRow in dv) { . . . }

A partir de ahí, solo tengo que devolver el valor a su tipo adecuado.

(string)logRow["Status"].ToString()

Otros consejos

actionLogDT.DefaultView.Sort = "StartDate";

actionLogDT = actionLogDT.DefaultView.ToTable();

Ordenar la vista no cambiará el orden de los datos en la tabla, solo el orden en la vista. Debería funcionar si hace su foreach en la vista en su lugar, haciendo que la fila del DataRowView vuelva a su fila fuertemente tipada.

foreach (DataRowView logRowView in actionLogDT.DefaultView)
{
    CustomerService.ActionLogStartEndRow logRow = logRowView.Row as CustomerService.ActionLogStartEndRow;
    // code here
}
foreach (var logRow in actionLogDT.DefaultView.ToDataTable()) { ... }

Además, dado que parecía que quería recorrer los registros, puede simplemente recorrer los objetos dataRowView en DefaultView .

foreach (DataRowView drv in table.DefaultView)
{
    string strValue = drv["ColumnName"].ToString();
    // its also worth mentioning that a DataRowView has a Row
    strValue = drv.Row["ColumnName"].ToString();
}

Intenta esto:

actionLogDT.DefaultView.Sort = "["+actionLogDT.Columns[0].ColumnName+"] asc";

Solo por curiosidad: ¿por qué está utilizando DataRowView ?

es decir,

foreach (DataRow row in actionLogDT.Rows)
{
  Console.WriteLine(row["Status"]);
}

Si necesita una copia de seguridad de datos, entonces puede hacer algo como:

var dv = actionLogDT.DefaultView;
dv.Sort = "StartDate";

actionLogDT = dv.ToTable();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top