2011-08-24 47 views
9

Tengo una DataTable que tiene 4 columnas. Quiero cambiar el valor de la tercera columna como "0". A continuación está mi DataTable.Cómo cambiar el valor de la columna DataTable sin bucle?

ID    Name   Value  Type 
----   ----   -----  ----- 
1    Sam    250  2 
2    Rai    324  3 
3    Tim    985  8 

el resultado deseado debe ser como a continuación:

ID    Name   Value  Type 
----   ----   -----  ------ 
1    Sam    0   2 
2    Rai    0   3 
3    Tim    0   8 

¿Cómo lograr esto sin bucle? Cualquier sugerencia por favor

+0

posible duplicado: http://stackoverflow.com/questions/5063551/set-value-for-all-rows-in-a-datatable-without-for-loop – Waqas

+0

@Waqas: Pero allí también se había usado foreach ... – thevan

+0

OK, solo una pregunta: ¿por qué no repetir? – Michael

Respuesta

13

¿Qué tal esto? ↓ sin bucle ....

static void Main(string[] args) 
{ 
    DataTable table = new DataTable(); 

    table.Columns.Add("col1"); 
    table.Columns.Add("col2"); 

    table.Rows.Add(new object[] { "1", "1" }); 
    table.Rows.Add(new object[] { "1", "1" }); 
    table.Rows.Add(new object[] { "1", "1" }); 
    table.Rows.Add(new object[] { "1", "1" }); 

    foreach (DataRow row in table.Rows) 
     Console.WriteLine(row["col2"].ToString()); 

    Console.WriteLine("***************************************"); 

    DataColumn dc = new DataColumn("col2"); 
    dc.DataType = typeof(int); 
    dc.DefaultValue = 0; 

    table.Columns.Remove("col2"); 
    table.Columns.Add(dc); 

    foreach (DataRow row in table.Rows) 
     Console.WriteLine(row["col2"].ToString()); 


    Console.ReadKey(); 
} 
+0

Recibí la respuesta del código anterior. Muchas gracias. – thevan

1

si conoce la ID, simplemente puede filtrarla mediante Seleccionar o Buscar (no recuerdo exactamente, pero creo que es Seleccionar), una vez que tiene la fila, puede asignar valores de columna.

Estoy seguro de que también hay una mejor manera orientada a LINQ, pero este enfoque ADO.NET/System.Data de la vieja escuela debería funcionar de todos modos.

+0

Pero Seleccionar solo es para filtrar la tabla de datos al dar su valor de columna. ¿Cómo puedo establecer el valor como "0" para todos los valores de columna? – thevan

+0

muchas gracias por su valiosa contribución a mi pregunta. – thevan

2
DataRow[] rows = myDataTable.Select("id = 'myIdValue'); 
//If you don't want to select a specific id ignore the parameter for select. 

for(int i = 0; i < rows.Length; i ++) 
{ 
     rows[i]["value"] = 0; 
} 

DataTable.Select Method

+0

muchas gracias por su valiosa contribución a mi pregunta. – thevan

1

Se puede utilizar un simple truco aquí. Eliminar la fila y volver a agregarla a la tabla.

dt.Columns.Remove("Value"); 
dt.Columns.Add("Value", type(System.Int32), 0); 
Cuestiones relacionadas