none
Datagridview Enter RRS feed

  • Pregunta

  • Hola Amigos estoy tratando de realizar lo siguiente

    Lleno un datagridview desde una BD

    En el datagridview realizar una modificación ingresando datos en una celda

    Si Presiono ENTER debería de realizar un evento;  guardar los cambios en una BD 

    Estoy tratando de usar este código pero salta una linea y no realiza el cambios

    Modifique el código para eliminar el salto de fila pero no lo acepta al primer evento sino al segundo

    Su apoyo por favor y gracias

      Private Sub DGVH_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DGVH.KeyDown
    
            e.SuppressKeyPress = True
    
            Try
    
                If e.KeyCode = Keys.Enter Then
    
    
                    'codigo a ejecutar
    				MsgBox ("Ok",MsgBoxStyle.Information ,"Cambios OK")
                 
                End If
    
            Catch ex As Exception
    
                MsgBox(ex.Message.ToString, MsgBoxStyle.Critical, "Error Eliminar Hardware")
    
            End Try
    
        End Sub



    Conocuica

    • Cambiado Enrique M. Montejo miércoles, 6 de diciembre de 2017 18:50 Pregunta relacionada con controles de Windows Forms.
    viernes, 1 de diciembre de 2017 17:49

Todas las respuestas

  • Lo primero es declarar al inicio de la forma:

    Private WithEvents cTxtBox As DataGridViewTextBoxEditingControl

    Luengo en los eventos del Datagridview:

        Private Sub Dgv_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles Dgv.EditingControlShowing
            ' Este evento se producirá cuando la celda pasa a modo de edición.
            ' Referenciamos el control DataGridViewTextBoxEditingControl actual.
            '
            cTxtBox = TryCast(e.Control, DataGridViewTextBoxEditingControl)

            ' Obtenemos el estilo de la celda actual (de aquí en adelante es opcional)
            '
            Dim style As DataGridViewCellStyle = e.CellStyle

            ' Mientras se edita la celda, aumentaremos la fuente
            ' y rellenaremos el color de fondo de la celda actual.
            '
            With style
                .Font = New Font(style.Font.FontFamily, 10, FontStyle.Bold)
                .BackColor = Color.Beige
            End With
        End Sub

    Luego creamos la función:

        Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
            Dim Tmp As String

            Select Case keyData
                Case Keys.Escape
                    ' No hacemos nada porque se supone
                    ' que la tecla Escape cancela la acción.
                Case Keys.Enter
                    If Dgv.CurrentCell.ColumnIndex <> 0 Then
                        If (cTxtBox IsNot Nothing) AndAlso (cTxtBox.Focused) Then
                            SendKeys.Send("{UP}")
                            SendKeys.Send("{TAB}")
                        End If
                    End If
                Case Else
                    Return MyBase.ProcessCmdKey(msg, keyData)
            End Select
        End Function

    Esto te garantiza control sobre el enter (siempre que estés en edición)


    MGilt

    domingo, 14 de enero de 2018 10:12
  • Hola Conocuica, a mi entender el error se presenta porque utilizas el evento KeyDown de DGV esto indica que aplilca sobre el control y no sobre la celda en edición, por eso en un primer enter lo que hace es salir de la edición y luego al segundo ya esta sobre el control, igualmente no se si es la forma más correcta de actualizar un BD, tal vez mejor un button y una confirmación "Realmente desea guardar los cambios?". Pero siguiendo tu línea puedes optar directamente en el evento CellEndEdit, ya que si tienes el DGV solo para modificar valores cualquier celda que modifiques disparará el código.

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    domingo, 14 de enero de 2018 10:46