none
Ayuda con datagridview RRS feed

  • Pregunta

  • Hola de nuevo yo jejeje, miren tengo un datagridview (no enlazado) con 9 columnas y 10 filas, las columnas 1 a 8 no son editables la 9 si lo es, ya que aca el usuario ingresara numeros, el problema es como yo muestro atravez de un msgbox(el valor que ingreso el usuario en la columna 9 al momento de presionar enter)........... he buscado en el foro y aun no he encontrado la respuesta.......
    Luis Ortiz
    viernes, 7 de agosto de 2009 17:48

Respuestas

  • Hola amigo.

    Fijate que tiene que hacer:

    1.   Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

            With DirectCast(sender, DataGridView)
                If .CurrentCell.ColumnIndex = 8 AndAlso String.IsNullOrEmpty(.Columns.Item(.CurrentCell.ColumnIndex).Tag) = True Then
                    AddHandler e.Control.KeyPress, AddressOf CheckCell
                    .Columns.Item(.CurrentCell.ColumnIndex).Tag = "Valido Tecla"
                End If
            End With

        End Sub

    2.    Private Sub CheckCell(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
            Select Case DataGridView1.CurrentCell.ColumnIndex
                Case 8
                   If CShort(Asc(e.KeyChar)) = 13 Then
                        Msgbox(Me.DataGridView1.CurrentCell.Value)
                        e.Handled = True
                    End If
            End Select
        End Sub


    Por favor calificame (marca como respuesta)


    Developer
    • Marcado como respuesta Bulla 35 viernes, 7 de agosto de 2009 19:38
    viernes, 7 de agosto de 2009 18:25
  • Hola amigo.

    Fijate que tiene que hacer:

    1.   Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

            With DirectCast(sender, DataGridView)
                If .CurrentCell.ColumnIndex = 8 AndAlso String.IsNullOrEmpty(.Columns.Item(.CurrentCell.ColumnIndex).Tag) = True Then
                    AddHandler e.Control.KeyPress, AddressOf CheckCell
                    .Columns.Item(.CurrentCell.ColumnIndex).Tag = "Valido Tecla"
                End If
            End With

        End Sub

    2.    Private Sub CheckCell(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
            Select Case DataGridView1.CurrentCell.ColumnIndex
                Case 8
                   If CShort(Asc(e.KeyChar)) = 13 Then
                        Msgbox(Me.DataGridView1.CurrentCell.Value)
                        e.Handled = True
                    End If
            End Select
        End Sub


    Por favor calificame (marca como respuesta)


    Developer
    muchas gracias por tu respuesta yo modifique tu codigo el cual me aclaro algunas dudas y quedo de esta forma y me funciona al ingresar un valor a una celda y darle enter aca dejo el codigo:

    1.-en nivel de formulario el siguiente codigo
    Private cellTextBox As DataGridViewTextBoxEditingControl

    2.-en el evento EditingControlShowing del datagridview el siguiente codigo:
     cellTextBox = TryCast(e.Control, DataGridViewTextBoxEditingControl)  

    este codigo acepta el valor ingresado en celltextbox

    3.- funcion que verifica que tecla que se presiono 

     Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
            Select Case keyData

                Case Keys.Escape

                    'tecla escape
                Case Keys.Enter

                    If (cellTextBox IsNot Nothing) AndAlso (cellTextBox.Focused) Then

                        ' El objeto DataGridViewTextBoxEditingControl tiene el foco.
                        Dim valor_entrado As Integer
                       
                        If cellTextBox.Text <> Nothing Then
                            valor_entrado = Val(cellTextBox.Text)
                           ' Obtenemos el valor actual de la celda.
                            MsgBox(valor_entrado)

                        End If
                    End If

                Case Keys.Delete
                    If (cellTextBox IsNot Nothing) AndAlso (cellTextBox.Focused) Then
                        MsgBox("tecla Borrar")
                    End If
                Case Else

                    Return MyBase.ProcessCmdKey(msg, keyData)
            End Select
        End Function


    esta funcion la tome desde el foro tambien el autor que publico esta funcion no me acuerdo pero gracias a todos de todas manera.

    Luis Ortiz
    • Marcado como respuesta Bulla 35 viernes, 7 de agosto de 2009 19:37
    viernes, 7 de agosto de 2009 19:36

Todas las respuestas

  • hola,

    How to trap KeyPress events in a DataGridViewTextBox?


    creo que el link te sera de ayuda.

    veras como hace uso del evento EditingControlShowing para detectar cuando se edita el registro y en ese evento tomar la celda y el textbox dentro de ella para asignarle el evento keypress que detecta el enter

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 7 de agosto de 2009 18:23
  • Hola amigo.

    Fijate que tiene que hacer:

    1.   Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

            With DirectCast(sender, DataGridView)
                If .CurrentCell.ColumnIndex = 8 AndAlso String.IsNullOrEmpty(.Columns.Item(.CurrentCell.ColumnIndex).Tag) = True Then
                    AddHandler e.Control.KeyPress, AddressOf CheckCell
                    .Columns.Item(.CurrentCell.ColumnIndex).Tag = "Valido Tecla"
                End If
            End With

        End Sub

    2.    Private Sub CheckCell(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
            Select Case DataGridView1.CurrentCell.ColumnIndex
                Case 8
                   If CShort(Asc(e.KeyChar)) = 13 Then
                        Msgbox(Me.DataGridView1.CurrentCell.Value)
                        e.Handled = True
                    End If
            End Select
        End Sub


    Por favor calificame (marca como respuesta)


    Developer
    • Marcado como respuesta Bulla 35 viernes, 7 de agosto de 2009 19:38
    viernes, 7 de agosto de 2009 18:25
  • Hola amigo.

    Fijate que tiene que hacer:

    1.   Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

            With DirectCast(sender, DataGridView)
                If .CurrentCell.ColumnIndex = 8 AndAlso String.IsNullOrEmpty(.Columns.Item(.CurrentCell.ColumnIndex).Tag) = True Then
                    AddHandler e.Control.KeyPress, AddressOf CheckCell
                    .Columns.Item(.CurrentCell.ColumnIndex).Tag = "Valido Tecla"
                End If
            End With

        End Sub

    2.    Private Sub CheckCell(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
            Select Case DataGridView1.CurrentCell.ColumnIndex
                Case 8
                   If CShort(Asc(e.KeyChar)) = 13 Then
                        Msgbox(Me.DataGridView1.CurrentCell.Value)
                        e.Handled = True
                    End If
            End Select
        End Sub


    Por favor calificame (marca como respuesta)


    Developer
    muchas gracias por tu respuesta yo modifique tu codigo el cual me aclaro algunas dudas y quedo de esta forma y me funciona al ingresar un valor a una celda y darle enter aca dejo el codigo:

    1.-en nivel de formulario el siguiente codigo
    Private cellTextBox As DataGridViewTextBoxEditingControl

    2.-en el evento EditingControlShowing del datagridview el siguiente codigo:
     cellTextBox = TryCast(e.Control, DataGridViewTextBoxEditingControl)  

    este codigo acepta el valor ingresado en celltextbox

    3.- funcion que verifica que tecla que se presiono 

     Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
            Select Case keyData

                Case Keys.Escape

                    'tecla escape
                Case Keys.Enter

                    If (cellTextBox IsNot Nothing) AndAlso (cellTextBox.Focused) Then

                        ' El objeto DataGridViewTextBoxEditingControl tiene el foco.
                        Dim valor_entrado As Integer
                       
                        If cellTextBox.Text <> Nothing Then
                            valor_entrado = Val(cellTextBox.Text)
                           ' Obtenemos el valor actual de la celda.
                            MsgBox(valor_entrado)

                        End If
                    End If

                Case Keys.Delete
                    If (cellTextBox IsNot Nothing) AndAlso (cellTextBox.Focused) Then
                        MsgBox("tecla Borrar")
                    End If
                Case Else

                    Return MyBase.ProcessCmdKey(msg, keyData)
            End Select
        End Function


    esta funcion la tome desde el foro tambien el autor que publico esta funcion no me acuerdo pero gracias a todos de todas manera.

    Luis Ortiz
    • Marcado como respuesta Bulla 35 viernes, 7 de agosto de 2009 19:37
    viernes, 7 de agosto de 2009 19:36
  • Hola amigo.

    Fijate que tiene que hacer:

    1.   Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

            With DirectCast(sender, DataGridView)
                If .CurrentCell.ColumnIndex = 8 AndAlso String.IsNullOrEmpty(.Columns.Item(.CurrentCell.ColumnIndex).Tag) = True Then
                    AddHandler e.Control.KeyPress, AddressOf CheckCell
                    .Columns.Item(.CurrentCell.ColumnIndex).Tag = "Valido Tecla"
                End If
            End With

        End Sub

    2.    Private Sub CheckCell(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
            Select Case DataGridView1.CurrentCell.ColumnIndex
                Case 8
                   If CShort(Asc(e.KeyChar)) = 13 Then
                        Msgbox(Me.DataGridView1.CurrentCell.Value)
                        e.Handled = True
                    End If
            End Select
        End Sub


    Por favor calificame (marca como respuesta)


    Developer
    muchas gracias por tu respuesta yo modifique tu codigo el cual me aclaro algunas dudas y quedo de esta forma y me funciona al ingresar un valor a una celda y darle enter aca dejo el codigo:

    1.-en nivel de formulario el siguiente codigo
    Private cellTextBox As DataGridViewTextBoxEditingControl

    2.-en el evento EditingControlShowing del datagridview el siguiente codigo:
     cellTextBox = TryCast(e.Control, DataGridViewTextBoxEditingControl)  

    este codigo acepta el valor ingresado en celltextbox

    3.- funcion que verifica que tecla que se presiono 

     Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
            Select Case keyData

                Case Keys.Escape

                    'tecla escape
                Case Keys.Enter

                    If (cellTextBox IsNot Nothing) AndAlso (cellTextBox.Focused) Then

                        ' El objeto DataGridViewTextBoxEditingControl tiene el foco.
                        Dim valor_entrado As Integer
                       
                        If cellTextBox.Text <> Nothing Then
                            valor_entrado = Val(cellTextBox.Text)
                           ' Obtenemos el valor actual de la celda.
                            MsgBox(valor_entrado)

                        End If
                    End If

                Case Keys.Delete
                    If (cellTextBox IsNot Nothing) AndAlso (cellTextBox.Focused) Then
                        MsgBox("tecla Borrar")
                    End If
                Case Else

                    Return MyBase.ProcessCmdKey(msg, keyData)
            End Select
        End Function


    esta funcion la tome desde el foro tambien el autor que publico esta funcion no me acuerdo pero gracias a todos de todas manera.

    Luis Ortiz
    viernes, 7 de agosto de 2009 19:39