Un detalle que se observa en el datagridview, es que para que los datos modificados sean grabados en la base de datos, debe moverse de fila(también pasa cuando el datagrid tiene la propiedad readonly a true y los valores se llenan desde textbox), para así internamente el datagridview confirme los cambios a sus tablas subyacentes, este comportamiento causa los siguientes problemas:
1.-El usuario modifica una celda del datagridview y de inmediato pulsa el botón de grabar, no graba la fila en que está posicionado.
2.-De un conjunto de filas modificadas, la última no se graba.
Bueno para solucionar este detalle, en el botón de grabar, se recorre la tabla subyacente que en este caso se llama dtabalumnos y finalizo todos los cambios pendientes de cada fila.
Luego finalizó todos los cambios pendientes del datagridview, que en este caso se llama dgalumnos
Dim filaalumno As DataRow
For Each filaalumno In dtabalumnos.Rows
filaalumno.EndEdit()
Next filaalumno
Dgalumnos.EndEdit()
Nota: se debe finalizar la edicion de la fila con endedit y despues el datagridview, de otra manera no funciona.
Si han encontrado otra solución mas sencilla, no duden en compartirla
Suscribirse a:
Enviar comentarios (Atom)

Muchas gracias por la solución, estoy empezando con .NET y estoy vuelto loco, te he puesto en mis favoritos.
ResponderSuprimirPaco.
Saludos Paco, que bueno que te haya servido la solución!.
ResponderSuprimirSuerte con el Visual Net y tus futuros proyectos.
Saludos,
ResponderSuprimirEstoy haciendo lo siguiente en el botón guardar, y aun así no funciona. Es posible que tenga que hacer algo más antes??
For Each dr As DataRow In varDT.Rows
dr.EndEdit()
Next dr
DGV_Perfiles.EndEdit()
Gracias por por tu ayuda...
Me faltaba terminar la edición en el BindingSource:
ResponderSuprimirBS_Perfiles.EndEdit()
Y listo.
Andrea, gracias por tu aportación. Yo en lo particular no ocupo BindingSource, pero que bueno que ya te haya orientado el artículo y a la vez nos hayas aportado la solución cuando se ocupa BS.
ResponderSuprimirSaludos
muy bueno, me parece increíble un error así, pero la solución es válida. Gracias
ResponderSuprimirGracias a ti anonimo por comentar. Pues si tienes razón,a veces pienso que en lugar de dedicar tanto tiempo a lanzar nuevas versiones y herramientas sofisticadas, Microsoft o cualquier otra compañia, deberian concentrarse en facilitar y perfeccionar cosas tan basicas como esta. Otros ejemplos:la concurrencia cuando varias personas entran al mismo registro e intentan grabar con la misma clave(la base de datos no esta enterada de los cambios, puesto que estan desconectados), combos --tambien tienen sus detalles-- y muchos otros problemas que se dan en la vida real de los desarrolladores, en fin. Saludos !
ResponderSuprimirGracias por colaborar.
ResponderSuprimirCreo que no hace falta recorrer todas las filas del datatable, solo hacer endedit en la fila en edicion y salvar la tabla.
dgv.endedit
dataset.tables("tabla").rows(dgv.currentcell.rowindex).endedit
dataadapter.update(dataset,"tabla")
Si les sirve, un saludo.
Gracias por comentar y darnos una solución.
ResponderSuprimirHabria que probarla y ver si funciona, aunque a primera vista deberia ser al reves, o sea, primero darle endedit al renglón y después al grid, tambien observo que es solo una celda y deberia ser todo el renglón, porque en este caso estas grabando desde varios textbox hacia diferentes celdas del renglon de tu grid.
Bueno si alguien tiene oportunidad de probarlo y funciona, ojala que nos avise.
saludos
Esto funciona si lo pones en un botón
ResponderSuprimirSqlDataAdapter.Update(dataset, "mitabla")
dataset.AcceptChanges()
Pero no funciona si lo pones en un evento del datagrid
Por ejemplo en el evento CellValueChanged no me sirve este codigo. No guarda:
If e.ColumnIndex = 0 AndAlso e.RowIndex <> -1 Then
Else
SqlDataAdapter.Update(dataset, "mitabla")
dataset.AcceptChanges()
End If
Saludos