nombre - obtener datos de un datatable c#
¿Cómo clasificas una columna y una dirección dada de DataTable? (6)
Crea un DataView . No puede ordenar un DataTable directamente, pero puede crear un DataView desde DataTable y ordenarlo.
Creando: http://msdn.microsoft.com/en-us/library/hy5b8exc.aspx
Clasificación: http://msdn.microsoft.com/en-us/library/13wb36xf.aspx
El siguiente ejemplo de código crea una vista que muestra todos los productos donde el número de unidades en stock es menor o igual al nivel de reorden, ordenado primero por ID de proveedor y luego por nombre de producto.
DataView prodView = new DataView(prodDS.Tables["Products"], "UnitsInStock <= ReorderLevel", "SupplierID, ProductName", DataViewRowState.CurrentRows);
Necesito recurrir, en memoria, a una DataTable basada en una columna y una dirección que provienen de un GridView. La función debe verse así:
public static DataTable resort(DataTable dt, string colName, string direction)
{
DataTable dtOut = null;
....
}
Necesito ayuda para completar esta función. Creo que puedo usar una declaración Select, pero no estoy seguro de cómo. No puedo hacer clic en Comentarios debido a este navegador, pero puede mostrarme una solución de DataTable local o nueva, ya sea una. Para las personas que me muestran los punteros, necesito una función codificada similar a la del prototipo.
Qué tal si:
// ds.Tables[0].DefaultView.Sort="au_fname DESC";
public static void Resort(ref DataTable dt, string colName, string direction)
{
string sortExpression = string.Format("{0} {1}", colName, direction);
dt.DefaultView.Sort = sortExpression;
}
En caso de que quiera clasificar en más de una dirección
public static void sortOutputTable(ref DataTable output)
{
DataView dv = output.DefaultView;
dv.Sort = "specialCode ASC, otherCode DESC";
DataTable sortedDT = dv.ToTable();
output = sortedDT;
}
En realidad tengo el mismo problema. Para mí trabajó de esta manera fácil:
Agregar los datos a una Datatable
datos y ordenarlos:
dt.DefaultView.Sort = "columnname";
dt = dt.DefaultView.ToTable();
Las tablas de datos tienen un método de selección sobrecargado que usted puede hacer esto. Vea aquí: http://msdn.microsoft.com/en-us/library/way3dy9w.aspx
Pero el valor de retorno de la llamada Select no es una DataTable sino una matriz de objetos RowData. Si desea devolver una DataTable desde su función, tendrá que compilarla desde cero en función de esa matriz de datos. Aquí hay una publicación que trata y proporciona una muestra para ambos problemas: http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/157a4a0f-1324-4301-9725-3def95de2bf2/
Si solo tiene un DataView, puede ordenarlo usando:
table.DefaultView.Sort = "columnName asc";
No lo he probado, pero creo que puede hacerlo con cualquier cantidad de DataViews, siempre que haga referencia a la correcta.
Supongo que "dirección" es "ASC" o "DESC" y dt contiene una columna llamada "colName"
public static DataTable resort(DataTable dt, string colName, string direction)
{
DataTable dtOut = null;
dt.DefaultView.Sort = colName + " " + direction;
dtOut = dt.DefaultView.ToTable();
return dtOut;
}
O sin crear dtOut
public static DataTable resort(DataTable dt, string colName, string direction)
{
dt.DefaultView.Sort = colName + " " + direction;
dt = dt.DefaultView.ToTable();
return dt;
}