Los foros del Guille

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

Google
 

MKN Reservas (Maro - Kayak Nerja)


Kayak Maro - Rutas y alquiler de kayak y tabla
Selecciona el foro y pulsa en mostrar:     Mostrar 
De tu inter�s (algunos de los avisos publicados)

01/feb./2019

Como te avisé, desde el 1 de febrero de 2019

No se podrán escribir nuevos mensajes ni editar los existentes

En breve solo se mostrarán los mensajes con respuestas.
Posiblemente para el 1 de marzo, solamente se mostrarán los que tengan respuestas y estén marcados como respuesta válida.

  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-2026  - foros.elGuille v1.0.6.3 (01/Jun/2021 12:45 GMT +2)  - (ASP.NET v4.0.30319.42000)
 
La hora GMT del servidor es: 10/06/2026 11:42:21 GMT