2011-05-21 56 views
9

dejar suponer que hay tres columnas en mi DataTable código¿Actualizar una tabla de datos en C# sin usar un bucle?

  1. nombre

  2. de color

Si conozco el código y nombre, ¿cómo puedo actualizar el color de esa fila específica cuyo código y nombre coinciden con mis criterios? Quiero hacer esto sin usar Loops!

+3

¿Por qué en el mundo quieres hacer esto sin usar loops? * En algún lugar *, se requerirá un bucle. Incluso si usa LINQ, un bucle todavía se realiza internamente. –

+0

Cody, el OP quiere actualizar 1 fila. Un diccionario no requeriría un bucle. –

+0

Una tabla no es un diccionario –

Respuesta

13

Usted puede utilizar LINQ:

DataRow dr = datatable.AsEnumerable().Where(r => ((string)r["code"]).Equals(someCode) && ((string)r["name"]).Equals(someName)).First(); 
dr["color"] = someColor; 

Por supuesto que estoy asumiendo todos esos criterios son cadenas. Debe cambiar los moldes a los tipos correctos.

+0

Ahora recibo un error en Data.EnumerableRowCollection no contiene .First() También estamos actualizando una fila cómo reflejará estos cambios en DataTable. –

+0

Asegúrese de que está 'usando System.Linq', pero' Where() 'no debería estar funcionando tampoco si no se estaba haciendo referencia a él. Si" refleja los cambios "quiere decir ver en la pantalla? Necesitará volver a vincular la DataTable a lo que esté usando para mostrarla. – Farinha

-1

Usted podría hacer:

foreach (DataRow row in datatable.Rows) 
     { 
      if(row["code"].ToString() == someCode && row["name"].ToString() == someName) 

       { 
        row["color"] = someColor; 
       } 


     } 
+5

-1 -> cartel claramente dicho sin bucles. – lstanczyk

+0

-1 -> El afiche indica en su pregunta que no use bucles. Entiendo que esto funciona pero ya rompe el criterio de la pregunta desde el principio. – IyaTaisho

12
// Use the Select method to find all rows matching the name and code. 
DataRow[] rows = myDataTable.Select("name 'nameValue' AND code = 'codeValue'); 

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

Cómo se reflejará esta fila actualizada (Comprometida) en myDataTable –

+0

@Zain: Esto ya hace la actualización. Use el método Seleccionar de DataTable para ubicar una fila específica y asignar nuevos valores a las columnas deseadas. Eso es. – CharithJ

+0

debería ser DataRow [] rows = myDataTable.Select ("name = 'nameValue' AND code = 'codeValue') – lstanczyk

5
DataTable recTable = new DataTable(); 

// do stuff to populate table 

recTable.Select(string.Format("[code] = '{0}' and [name] = '{1}'", someCode, someName)).ToList<DataRow>().ForEach(r => r["Color"] = colorValue); 
+0

Esto sigue siendo un ciclo –

Cuestiones relacionadas