| ID | Asunto | Fecha | Nick | |
| 51285 | Actualizar datatable | 10/12/09 15:31 | Alvaro_t | |  |
Estoy intentando actualizar los valores de un datatable, de forma que me mantenga los datos que tenía (DataRowVersion.Original) y guarde también los nuevos datos que añado (DataRowVersion.Current) para pasarlas a la bd y comprobar asi errores de concurrencia. Lo hago de la siguiente manera: //Busco la fila que quiero modificar y se la asigno a un DataRow DataRow dr2 = datatableUsuarios.Rows.Find(objUsuarioEntidad.ID_Usuario); //Asigno los nuevos valores a esa fila. dr2["ID_Usuario"]=objEntidad.ID_Usuario; dr2["Nombre"]=objEntidad.Nombre; dr2["Contraseña"]=objEntidad.Contraseña; //Vuelvo la fila en el datatable datatableUsuarios.ImportRow(dr2);
Me surgen varios problemas. El primero es que como la fila ya existe y ID_Usuario es autonumerica e incremental, no me deja añadir ese usuario, me da error en el import. No se si habrá otra forma de hacerlo. Por otro lado no consigo que DataRow me guarde las versiones current y original, me guarda los mismos datos en las dos. Alguien sabe como puedo solucionar esto? |
|
| ID | Asunto | Fecha | Nick | |
| 51290 | Re: Actualizar datatable (Resp: 51285) | 10/12/09 18:50 | Alvaro_t | |  |
Bueno, me respondo ami mismo, ya que como msoy muy cabezota y hasta que no resuelvo algo no paro, pues ya he encontrado la solución:
El método ImportRow no se puede usar en este caso pues si intentamos insertar una fila con el mismo PK, que e slo que quiero exactamente da error de concurrencia.
LA solución es no poner nada. Por lo visto, al usar datatable.Rows.Find(ID_Usuario) este se encarga de "enlazarse" con el datarow al que se le asigna, por lo que al cambiar un dato en ese datarow se cambia también een el datatable. Además, para poder cambiar el datarow hay que llamar primero al método BeginEdit() y al final a EndEdit();
Pongo como me ha quedado: DataRow dr = datatableUsuarios.Rows.Find(objUsuarioEntidad.ID_Usuario);
dr.BeginEdit(); //No pongo ID_Usuario porque no cambia y ademas es de solo lectura //dr2["ID_Usuario"]=objEntidad.ID_Usuario; dr2["Nombre"]=objEntidad.Nombre; dr2["Contraseña"]=objEntidad.Contraseña;
//Actualizo la BD dataadapterUsuarios.Update(datableUsuarios);
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |