La mejor manera de añadir una nueva columna con numeración secuencial en una tabla de datos existente

StackOverflow https://stackoverflow.com/questions/4310791

  •  29-09-2019
  •  | 
  •  

Pregunta

Tengo una tabla de datos no vacía. ¿Cuál es la mejor manera de añadir otra columna a ella que tiene una numeración secuencial a partir del 1.

Me trató 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);
el ajuste de

Will ninguna ayuda expresión en este escenario?

Gracias de antemano

¿Fue útil?

Solución

Creo que se podría lograr que mediante el uso de un segundo "ayudante" tabla de datos que contendría sólo un campo de incremento automático y luego rellena / fusionarlo 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 entonces usted acaba de regresar mesa dtIncremented en lugar del original, dt. No es una solución elegante pero debería funcionar.

Otros consejos

a continuación el código que funcionó para mí

Código es 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++;
            }
        }
    }

Vas a tener que construir una tabla de datos completamente nuevo para esto y manualmente profunda copiar cada fila uno por uno de la tabla antigua a la nueva. Lo sentimos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top