ordenar mover columnas column c# datatable order

c# - mover - Cómo cambiar el orden de las columnas DataTable



ordenar datatable (5)

Cómo cambiar el orden de las columnas Datatable en c #.

Ejemplo:

El orden de tipo de tabla sql creado es Qty, Unit, Id pero en el programa DataTable el orden es Id, Qty, Unit. En el código Behind am, pase directamente el tipo de tabla DataTable a 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


Esto se basa en la respuesta de "configuración regional predeterminada", pero eliminará los nombres de columna no válidos antes de establecer el ordinal. Esto se debe a que si accidentalmente envía un nombre de columna inválido, fallará y si pone una marca para evitar que falle, el índice sería incorrecto ya que omitiría los índices donde 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://.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)); } }


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 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"});


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 ............ ........


Sé que esta es una pregunta realmente vieja ... y parece que fue respondida ... Pero llegué aquí con la misma pregunta pero con una razón diferente para la pregunta, y por eso una respuesta ligeramente diferente me funcionó. Tengo una bonita vista genérica de gráficos reutilizable que toma la fuente de datos que se le proporciona y solo muestra las columnas en su orden predeterminado. Puse los alias y el orden y la selección de columnas en el nivel de compilación de tablas del conjunto de datos en el diseñador. Sin embargo, cambiar el orden de las consultas de selección de columnas no parece afectar las columnas devueltas a través del conjunto de datos. He encontrado que la única manera de hacerlo en el diseñador es eliminar todas las columnas seleccionadas dentro del compilador de tablas y volver a agregarlas en el orden en que las haya seleccionado.