type new net ejemplo datatype data columna column change agregar c# .net datatable datacolumn

c# - new - Mejor forma de agregar una nueva columna con numeración secuencial en una tabla de datos existente



datatable vb.net ejemplo (3)

Tengo una tabla de datos no vacía. Cuál es la mejor manera de agregarle otra columna que tenga una numeración secuencial comenzando desde 1.

Probé el siguiente código. Pero no funcionó.

DataColumn dc = new DataColumn("Col1"); dc.AutoIncrement = true; dc.AutoIncrementSeed = 1; dc.AutoIncrementStep = 1; dc.DataType = typeof(Int32); dt.Columns.Add(dc);

¿Configurará cualquier ayuda de expresión en este escenario?

Gracias por adelantado


Creo que podría lograr eso usando una segunda tabla de datos "auxiliar" que contendría solo un campo de incremento automático y luego lo rellenaría / fusionaría con los datos existentes, algo como esto:

DataTable dtIncremented = new DataTable(dt.TableName); DataColumn dc = new DataColumn("Col1"); dc.AutoIncrement = true; dc.AutoIncrementSeed = 1; dc.AutoIncrementStep = 1; dc.DataType = typeof(Int32); dtIncremented.Columns.Add(dc); dtIncremented.BeginLoadData(); DataTableReader dtReader = new DataTableReader(dt); dtIncremented.Load(dtReader); dtIncremented.EndLoadData();

Y luego solo devolverá la tabla dtIncremented en lugar del dt original. No es una solución elegante, pero debería funcionar.


Tendrás que crear una tabla de datos completamente nueva para esto y copiar profundamente cada fila una por una de la tabla anterior a la nueva. Lo siento.


debajo del código funcionó para mí

El código está editado

// Added temp rows so that this solution can mimic actual requirement DataTable dt = new DataTable(); DataColumn dc1 = new DataColumn("Col"); dt.Columns.Add(dc1); for(int i=0;i<10;i++) { DataRow dr = dt.NewRow(); dr["Col"] = i.ToString(); dt.Rows.Add(dr); } // Added new column with Autoincrement, DataColumn dc = new DataColumn("Col1"); dc.AutoIncrement = true; dc.AutoIncrementSeed = 1; dc.DataType = typeof(Int32); // Handeled CollectionChanged event dt.Columns.CollectionChanged += new CollectionChangeEventHandler(Columns_CollectionChanged); dt.Columns.Add(dc); // After column added demostratation DataRow dr1 = dt.NewRow(); dt.Rows.Add(dr1); void Columns_CollectionChanged(object sender, CollectionChangeEventArgs e) { DataColumn dc = (e.Element as DataColumn); if (dc != null && dc.AutoIncrement) { long i = dc.AutoIncrementSeed; foreach (DataRow drow in dc.Table.Rows) { drow[dc] = i; i++; } } }