Cómo cambiar el orden de las columnas de la tabla de datos en c #.
Ejemplo:
El pedido del tipo de tabla sql creado es Cant, Unidad, Id, pero en el programa el orden de DataTable es Id, Cant, Unidad. En el código Detrás, paso directamente DataTable al tipo de tabla SQL para que el orden de la tabla sea diferente.
DataTable columns are: `Id,Qty,Unit.` I want this to be: `Qty,Unit,Id`
Por favor ayuda
Qty,Unit,Id
pero en el programa el orden de DataTable esId,Qty,Unit
. En el código Detrás, paso directamente DataTable al tipo de tabla sql para que el orden de la tabla sea diferente. Por eso me preguntan "¿cómo cambiar el orden de las columnas?"Respuestas:
Intente utilizar el método DataColumn.SetOrdinal . Por ejemplo:
dataTable.Columns["Qty"].SetOrdinal(0); dataTable.Columns["Unit"].SetOrdinal(1);
ACTUALIZACIÓN: Esta respuesta recibió mucha más atención de la que esperaba. Para evitar confusiones y facilitar su uso, decidí crear un método de extensión para ordenar las columnas en DataTable:
Método de extensión:
public static class DataTableExtensions { public static void SetColumnsOrder(this DataTable table, params String[] columnNames) { int columnIndex = 0; foreach(var columnName in columnNames) { table.Columns[columnName].SetOrdinal(columnIndex); columnIndex++; } } }
Uso:
table.SetColumnsOrder("Qty", "Unit", "Id");
o
table.SetColumnsOrder(new string[]{"Qty", "Unit", "Id"});
fuente
Qty,Id,Unit
solo. Quiero asíQty,Unit,Id
.Esto se basa en la respuesta de la "configuración regional predeterminada" pero eliminará los nombres de columna no válidos antes de establecer el ordinal. Esto se debe a que si envía accidentalmente un nombre de columna no válido, fallará y si marca una casilla para evitar que falle, el índice sería incorrecto, ya que omitiría índices dondequiera que se pasara un nombre de columna no válido.
public static class DataTableExtensions { /// <summary> /// SetOrdinal of DataTable columns based on the index of the columnNames array. Removes invalid column names first. /// </summary> /// <param name="table"></param> /// <param name="columnNames"></param> /// <remarks> http://stackoverflow.com/questions/3757997/how-to-change-datatable-colums-order</remarks> public static void SetColumnsOrder(this DataTable dtbl, params String[] columnNames) { List<string> listColNames = columnNames.ToList(); //Remove invalid column names. foreach (string colName in columnNames) { if (!dtbl.Columns.Contains(colName)) { listColNames.Remove(colName); } } foreach (string colName in listColNames) { dtbl.Columns[colName].SetOrdinal(listColNames.IndexOf(colName)); } }
fuente
Sé que esta es una pregunta muy antigua ... y parece que fue respondida ... Pero llegué aquí con la misma pregunta pero una razón diferente para la pregunta, por lo que una respuesta ligeramente diferente funcionó para mí. Tengo una bonita vista de cuadrícula de datos genérica reutilizable que toma la fuente de datos proporcionada y solo muestra las columnas en su orden predeterminado. Puse los alias y el orden y la selección de las columnas en el nivel del adaptador de tabla del conjunto de datos en el diseñador. Sin embargo, cambiar el orden de consulta de selección de las columnas no parece afectar las columnas devueltas a través del conjunto de datos. Encontré que la única forma de hacer esto en el diseñador es eliminar todas las columnas seleccionadas en el adaptador de tabla y volver a agregarlas en el orden en que las desea seleccionar.
fuente
Si tiene más de 2-3 columnas, no
SetOrdinal
es el camino a seguir. El método de DataView acepta una matriz de parámetros de nombres de columna. Ordene sus columnas allí:ToTable
DataView dataView = dataTable.DefaultView; dataTable = dataView.ToTable(true, "Qty", "Unit", "Id");
fuente
Podemos usar este método para cambiar el índice de la columna, pero debe aplicarse a todas las columnas si hay más de dos columnas, de lo contrario, mostrará todos los valores incorrectos de la tabla de datos ............ ........
fuente
Reordenar la tabla de datos en función de alguna condición o casilla de verificación marcada. PFB: -
var tableResult= $('#exampleTable').DataTable(); var $tr = $(this).closest('tr'); if ($("#chkBoxId").prop("checked")) { // re-draw table shorting based on condition tableResult.row($tr).invalidate().order([colindx, 'asc']).draw(); } else { tableResult.row($tr).invalidate().order([colindx, "asc"]).draw(); }
fuente