none
Problema con DataGridView

    Pregunta

  • Buenas noches:

    Tengo un problema con un DataGridView. Si le introduzco datos manualmente me guarda los cambios sin problema, pero si lo hago por código no  me actualice los cambios en la base de datos hasta que cambio de registro manualmente.

    El código para guardar los cambios es el siguiente.

    Private Sub GuardarCambios()
    
            Dim dt As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
            Try
                Using cnn As New SqlConnection(AccesoBd.CadenaConexion)
                    Dim sql As String = "SELECT * FROM USUARIOS"
                    Dim da As New SqlDataAdapter(sql, cnn)
                    Dim cb As New SqlCommandBuilder(da)
                    cb.QuotePrefix = "["
                    cb.QuoteSuffix = "]"
                    da.InsertCommand = cb.GetInsertCommand()
                    da.UpdateCommand = cb.GetUpdateCommand()
                    da.DeleteCommand = cb.GetDeleteCommand()
                    Dim n As Integer = da.Update(dt)
                    MessageBox.Show("Nº de registros afectados:  " & CStr(n))
                End Using
            Catch expSQL As SqlException
                Dim men As String
                If expSQL.Number = 2627 Then
                    If expSQL.Message.IndexOf("PRIMARY") <> -1 Then
                        men = "Error por intentar grabar valores duplicados en campos clave, corrija el problema y vuelva a intentar"
                    ElseIf expSQL.Message.IndexOf("UNIQUE") <> -1 Then
                        men = "Error por intentar grabar valores duplicados en campos de valores únicos, corrija el problema y vuelva a intentar"
                    Else
                        men = "Error general en la base de datos"
                    End If
                ElseIf expSQL.Number = 515 Then
                    men = "Algunos datos no han sido ingresados y son necesario para completar la operación, corrija el problema y vuelva a intentar"
                Else
                    men = "Error general en la base de datos"
                End If
                MsgBox(men)
                ' expSQL.ToString, MsgBoxStyle.OkOnly, "SQL Exception")
            End Try
            '     DataGridView1.AllowUserToAddRows = False
            'DataGridView1.ReadOnly = True
            '    DataGridView1.Columns("USUARIO").ReadOnly = True
        End Sub
    

    Creo que al introducir los datos por código le falta algo como que actualice el datagridview, ya que solo se actualiza al cambiar de registro.

    Muchas gracias por su atención.

    Saludos.

    martes, 15 de noviembre de 2016 20:20

Respuestas

  • Hola Ángelroso,

    Para que se ejecute el CellEndEdit primero tiene que haber una celda en modo edición, sino nunca podrá ejecutarse. Podrías iniciar la edición usando .BeginEdit(True).

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Ángelroso miércoles, 16 de noviembre de 2016 21:45
    miércoles, 16 de noviembre de 2016 20:57

Todas las respuestas

  • por lo que he leido en tu procedimiento si el problema es que si insertas por codigo tal ves estes olvidando usar los corchetes y como esta dentro de un bloque try no puedes ver el error ya que lo condicionas a que solo respondiera por el error 2627 entonces.. quita el bloque try y has un nuevo intento tal vez te de mas detalle .. yo hasta aqui te puedo dar porque no conozco nada mas de lo que estas haciendo..
    miércoles, 16 de noviembre de 2016 20:23
  • Muchas gracias, Rolando.

    Error no me da, simplemente que no actualiza la base de datos. En el datagridview si que cambia el dato, pero no lo valida pues no termina de editarlo y no provoca el evento CellEndEdit. He probado con diferentes eventos y nada. Creo que me falta que la celda termine la edición pero no sé como provocarlo, ya le he cambiado de fila y se posiciona en otra pero sigue sin cerrar la edición y por consiguiente si me salgo y vuelvo a entrar el datagridview tiene en la celda el dato que tenía anteriormente a la modificación por código.

    Ya no sé que hacer pues no hago más que leer temas que se asemejan a éste, pero no he dado con la solución.

    Muchas gracias por tu interés.

    Saludos.

    miércoles, 16 de noviembre de 2016 20:52
  • Hola Ángelroso,

    Para que se ejecute el CellEndEdit primero tiene que haber una celda en modo edición, sino nunca podrá ejecutarse. Podrías iniciar la edición usando .BeginEdit(True).

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Ángelroso miércoles, 16 de noviembre de 2016 21:45
    miércoles, 16 de noviembre de 2016 20:57
  • Hola Joel.

    Muchas gracias.

    Ya me funciona, llevaba 2 días leyendo información y no daba con ello y resulta que es una línea de código .BeginEdit(True).

    Reitero las gracias y saludos.

    miércoles, 16 de noviembre de 2016 21:48