none
Controlar datos insertados en un datagridview RRS feed

  • Pregunta

  • Saludos, tengo un datagridview el cual permite la insercción directa de datos, sin embargo quiero poder controlar que en una de las columnas solo se pueda insertar números, en otros solo puntos y números etc.

    En los textbox usaba el evento del keypress, sin embargo éste evento en un datagridview engloba a todo el datagrid y no solo a una celda especificada.

    ¿Alguna ayuda?
    lunes, 1 de septiembre de 2008 17:01

Respuestas

  • "Sirañaman" escribió:

    > tengo un datagridview el cual permite la insercción directa de
    > datos, sin embargo quiero poder controlar que en una de las
    > columnas solo se pueda insertar números, en otros solo puntos
    > y números etc.
    >
    > En los textbox usaba el evento del keypress, sin embargo éste
    > evento en un datagridview engloba a todo el datagrid y no
    > solo a una celda especificada.

    Porque tienes que detectar el control TextBox subyacente que existe en todas las celdas de una columna del tipo DataGridViewTextBoxColumn del control DataGridView. Una vez que detectes el control, instalarías su controlador para el evento KeyPress, con lo cual, podrías detectar la tecla pulsada de igual manera que si se hubiera pulsado dentro de un simple control TextBox.

    Para detectar el control subyacente, tendrías que hacerlo dentro del evento EditingControlShowing del control DataGridView:

        Private Sub DataGridView1_EditingControlShowing( _
            ByVal sender As Object, _
            ByVal e As DataGridViewEditingControlShowingEventArgs) _
            Handles DataGridView1.EditingControlShowing

            ' Celda actual
            '
            Dim currentCell As DataGridViewCell = DataGridView1.CurrentCell

            ' Obtenemos el índice de la columna
            '
            Dim index As Integer = currentCell.ColumnIndex

            ' Si la celda actual no se corresponde con la segunda
            ' y tercera columna, abandonamos el procedimiento.
            '
            If (index <> 1 And index <> 2) Then Return

            ' Obtenemos el control interno que alberga la celda actual.
            '
            Dim ctrl As Control = e.Control

            ' Primero eliminamos su controlador para el evento KeyPress
            '
            RemoveHandler ctrl.KeyPress, AddressOf CellOnKeyPress

            ' Y después, lo volvemos a instalar.
            '
            AddHandler ctrl.KeyPress, AddressOf CellOnKeyPress

        End Sub

    Y para detectar la tecla presionada, lo harías dentro de éste procedimiento:

        Private Sub CellOnKeyPress(ByVal sender As Object, _
                                   ByVal e As KeyPressEventArgs)

            ' Aquí detectaríamos la tecla que actualmente ha sido pulsada

        End Sub

    Si tienes creada tu propia rutina para detectar los números, la misma te podría servir.

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    sábado, 7 de mayo de 2011 9:53
    Moderador