2009-11-03 21 views
16

Tengo algún problema, uso DataTable para almacenar mis datos en dataGridView. datos se inputed así:C# cómo cambiar los datos en DataTable?

dt = new DataTable(); 
dt.Columns.Add("ID", typeof(int)); 
dt.Columns.Add("par", typeof(string)); 
dt.Columns.Add("max", typeof(int)); 
dt.Columns.Add("now", typeof(int)); 

dt.Rows.Add(new object[] { id++,i + " " + j++, strarr[0], strarr[1] }); // ... etc etc 

dataGridView1.DataSource = dt; 

ahora quiero hacer algunos cambios, utilizo código:

dt.Rows[1].ItemArray[3] = "VALUE"; 

Cuando elimino errores, ItemArray representa la fila Quiero, por lo que su okey, pero todavía no puedo hacer ningún cambio, ¿qué está mal? ¿Cómo actualizar DataTable? Estoy buscando en Google y nada :(

Respuesta

14

dt.Rows[1].ItemArray le da una copia de matrices de elementos Cuando se modifica, usted es no modificar el original

Usted puede simplemente hacer esto:..

dt.Rows[1][3] = "Value"; 

propiedad ItemArray se utiliza cuando se desea modificar todos los valores de la fila.

ej .:

dt.Rows[1].ItemArray = newItemArray; 
38

probar el método de SetField:

table.Rows[i].SetField(column, value);
table.Rows[i].SetField(columnIndex, value);
table.Rows[i].SetField(columnName, value);

Esto debe realizar el trabajo y es un "limpiador" bits que utilizan filas [i] [j].

+0

+1 - Acepto, su sugerencia es mucho más clara que los ejemplos que usan una matriz. Su ejemplo permite una identificación clara del campo por nombre, en lugar del campo implícito por posición en una matriz. Creo que el uso de la matriz es barato y vago. Sin duda aumenta el riesgo de errores durante el mantenimiento futuro. Además, si el objeto de la tabla de datos se deriva de una estructura de base de datos, y si esa estructura de la base de datos cambia, como insertar una columna en el medio de la definición de la tabla, el uso del método de la matriz podría generar un error en tiempo de ejecución o peor: datos corruptos no detectados. – barrypicker

7

Probablemente debería establecer la propiedad dt.Columns["columnName"].ReadOnly = false; antes.

+2

Debería ser dt.columns [n] .ReadOnly –

Cuestiones relacionadas