2011-06-21 26 views
61

Tengo una DataTable con 5 columnas y 10 filas. Ahora quiero agregar una nueva columna al DataTable y quiero asignar el valor de DropDownList a la columna nueva. Por lo tanto, el valor DropDownList se debe agregar 10 veces a la columna nueva. ¿Cómo hacer esto? Nota: sin usar FOR LOOP.Cómo agregar una nueva columna con valor a la tabla de datos existente?

Por ejemplo: Mi DataTable existente es así.

ID    Value 
    -----   ------- 
    1    100 
    2    150 

Ahora quiero agregar una nueva columna "CourseID" a este DataTable. Tengo una DropDownList. Su valor seleccionado es 1. Así Mi tabla existente debería ser, como a continuación:

ID    Value   CourseID 
    -----   ------  ---------- 
    1    100    1 
    2    150    1 

cómo hacer esto?

+0

@CheckRaise: Se necesitaría más tiempo para completar el bucle, si el DataTable contiene más registros. – thevan

Respuesta

106

Sin bucle For:

Dim newColumn As New Data.DataColumn("Foo", GetType(System.String))  
newColumn.DefaultValue = "Your DropDownList value" 
table.Columns.Add(newColumn) 

Esto no se ha probado. He utilizado una línea C# conversion tool:

System.Data.DataColumn newColumn = new System.Data.DataColumn("Foo", typeof(System.String)); 
newColumn.DefaultValue = "Your DropDownList value"; 
table.Columns.Add(newColumn); 
+8

+1 Lo retiro. Configurar la columna con 'DefaultValue' * luego * agregarlo a la colección' Columns' tiene el efecto deseado de aplicarse a todas las filas existentes. Sin embargo, agregarlo a 'Columnas' y luego establecer' DefaultValue' no produce el mismo resultado (en cuyo caso solo funciona en las filas recién agregadas y no en las existentes). –

12

Añadir la columna y actualizar todas las filas de la DataTable, por ejemplo:

DataTable tbl = new DataTable(); 
tbl.Columns.Add(new DataColumn("ID", typeof(Int32))); 
tbl.Columns.Add(new DataColumn("Name", typeof(string))); 
for (Int32 i = 1; i <= 10; i++) { 
    DataRow row = tbl.NewRow(); 
    row["ID"] = i; 
    row["Name"] = i + ". row"; 
    tbl.Rows.Add(row); 
} 
DataColumn newCol = new DataColumn("NewColumn", typeof(string)); 
newCol.AllowDBNull = true; 
tbl.Columns.Add(newCol); 
foreach (DataRow row in tbl.Rows) { 
    row["NewColumn"] = "You DropDownList value"; 
} 
//if you don't want to allow null-values' 
newCol.AllowDBNull = false; 
+0

Y usando 'DefaultValue' para' new System.Data.DataColumn'? – Kiquenet

+0

@Kiquenet: ¿Por qué debería usar eso? ¿No sería un duplicado para [respuesta de Keith] (http://stackoverflow.com/a/6427038/284240)? Usar 'DefaultValue' es solo un enfoque diferente. Este también funciona y no es menos eficiente solo un poco menos conciso. Tampoco tiene inconvenientes, no necesita recordar si puede agregar la columna antes de aplicar el valor predeterminado. Además, si solo desea este valor una vez cuando agrega la columna a la tabla, debe eliminar el 'DefaultValue' nuevamente. –

-1
//Data Table 

protected DataTable tblDynamic 
     { 
      get 
      { 
       return (DataTable)ViewState["tblDynamic"]; 
      } 
      set 
      { 
       ViewState["tblDynamic"] = value; 
      } 
     } 
//DynamicReport_GetUserType() function for getting data from DB 


System.Data.DataSet ds = manage.DynamicReport_GetUserType(); 
       tblDynamic = ds.Tables[13]; 

//Add Column as "TypeName" 

       tblDynamic.Columns.Add(new DataColumn("TypeName", typeof(string))); 

//fill column data against ds.Tables[13] 


       for (int i = 0; i < tblDynamic.Rows.Count; i++) 
       { 

        if (tblDynamic.Rows[i]["Type"].ToString()=="A") 
        { 
         tblDynamic.Rows[i]["TypeName"] = "Apple"; 
        } 
        if (tblDynamic.Rows[i]["Type"].ToString() == "B") 
        { 
         tblDynamic.Rows[i]["TypeName"] = "Ball"; 
        } 
        if (tblDynamic.Rows[i]["Type"].ToString() == "C") 
        { 
         tblDynamic.Rows[i]["TypeName"] = "Cat"; 
        } 
        if (tblDynamic.Rows[i]["Type"].ToString() == "D") 
        { 
         tblDynamic.Rows[i]["TypeName"] = "Dog; 
        } 
       } 
Cuestiones relacionadas