Los foros del Guille

elGuille.hosting: Ofertas de alojamiento
posiblemente los mejores precios
¡¡¡ Ahora con el doble de casi todo !!!

Si no encuentras respuesta, puedes buscar en el sitio del Guille

Google
 
Selecciona el foro y pulsa en mostrar:     Mostrar 
De tu interés (algunos de los avisos publicados)

12/Mar/2008
Si quieres ver los mensajes que nadie ha contestado, puedes usar este link: http://foros.elguille.org/MensajesSinRespuestas.aspx
También lo tienes en la página de inicio.

  Foro: .NET.C# Cantidad:  Desde:   Hasta:    Aplicar   Responder 
Respuestas a: 51285 - Actualizar datatable
IDAsuntoFechaNick 
51285 Actualizar datatable10/12/09 15:31Alvaro_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?
IDAsuntoFechaNick 
51290 Re: Actualizar datatable (Resp: 51285)10/12/09 18:50Alvaro_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.

 
(c) Guillermo 'guille' Som, 2005-2010  - foros.elGuille v1.0.5.3 (23/Mar/2009 14:50 GMT +1)  - (ASP.NET 2.0 v2.0.50727.1433)
 
Usuarios activos: 261 - App. iniciada: 9/9/2010 1:11:11 AM GMT - La hora GMT del servidor es: 10/09/2010 04:59:19 GMT