none
AYUDA CON DATAGRIDVIEW KEYPRESS RRS feed

  • Pregunta

  • Hola
    tengo un problema al capturar un texto en una celda de una datagridview

     Try
                    Codi= Dgv1.Item(1, Dgv1.CurrentCell.RowIndex).GetEditedFormattedValue(Dgv1.CurrentCell.RowIndex, DataGridViewDataErrorContexts.Display)
                Catch ex As Exception
                    Codi= ""
                End Try

    uso este codigo para capturar el texto, pero no me captura todo el texto
    si  llego a digitar  "Hola"
    en la variable me guarda "Hol" el ultimo caracter no me captura ya me lo muestra si digito un quinto caracter 


    deRuNoMas

    lunes, 21 de mayo de 2012 16:12

Respuestas

  • Hola

    Prueba esto

    Private ctl As DataGridViewTextBoxEditingControl

    Private Sub dataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then ctl = CType(e.Control, DataGridViewTextBoxEditingControl) AddHandler ctl.TextChanged, AddressOf TextBox_TextChanged End If End Sub Private Sub TextBox_TextChanged(sender As System.Object, e As System.EventArgs) Codi = ctl.Text End Sub Private Sub DataGridView1_CellEndEdit(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit If ctl IsNot Nothing Then RemoveHandler ctl.TextChanged, AddressOf TextBox_TextChanged ctl = Nothing End If End Sub

    Este tema lo comenta leandro en su blog, solo hay que adaptarlo a las necesidades

    http://ltuttini.blogspot.com.es/2010/05/datagridview-texto-celdas-en-mayuscula.html



    • Editado ToniAG jueves, 24 de mayo de 2012 16:16
    • Marcado como respuesta Eder CostaModerator miércoles, 30 de mayo de 2012 15:25
    jueves, 24 de mayo de 2012 16:00
  • "deRuNoMas" escribió:

    > tengo un problema al capturar un texto en una celda de una datagridview

    Hola:

    Mejor será que te olvides de utilizar los eventos de teclado en el control DataGridView. Si tu intención es obtener el texto que se está escribiendo en una celda cualquiera del control DataGridView, tienes que referenciar el control TextBox que se "esconde" en las celdas normales del control DataGridView.

    Una vez referenciado dicho control TextBox, trabajarías con él como podrías trabajar con otro control TextBox que añadas a tu formulario.

    Añade a tu formulario los siguientes procedimientos:

       Private Sub Dgv1_EditingControlShowing( _
         sender As Object, e As DataGridViewEditingControlShowingEventArgs) _
         Handles Dgv1.DataGridViewEditingControlShowingEventArgs
         
         ' Referenciamos el control TextBox subyacente
         ' existente en la celda actual del control
         ' DataGridView.
         '
         Dim tb As TextBox = DirectCast(e.Control, TextBox)
         
         If (tb Is Nothing) Then Return
         
         ' Primero desinstalamos el controlador para
         ' el evento TextChanged del control TextBox
         ' y después lo volvemos a instalar.
         '
         RemoveHandler tb.TextChanged, AddressOf TextBoxOnTextChanged
         AddHandler tb.TextChanged, AddressOf TextBoxOnTextChanged
              
        End Sub
        
        Private Sub TextBoxOnTextChanged(sender As Object, e As EventArgs)
         
         ' Control TextBox que ha desencadenado el evento.
         '
         Dim tb As TextBox = DirectCast(sender, TextBox)
         
         ' Vamos escribiendo en la consola el valor
         ' actual del control TextBox.
         '
         Console.WriteLine(tb.Text)
        
        End Sub

    Para más información sobre cómo detectar la tecla pulsada en un control DataGridView, te aconsejaría que le echaras un vistazo al siguiente artículo:

    Cómo detectar la tecla pulsada en una celda del control DataGridView

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    jueves, 24 de mayo de 2012 16:15
    Moderador

Todas las respuestas

  • Hola,

    ¿En que evento lo pones? Lo puedes poner en CellValidating para que te capture la celda cuando pierda el foco.

    Saludos,

    Javier J.

    lunes, 21 de mayo de 2012 17:12
  • lo pongo en el evento keypress
    cuando pierde el focus puede funcionar 
    pero lo quiero hacer en el momento que se digita 

    deRuNoMas

    lunes, 21 de mayo de 2012 17:46
  • ¿Has probado con el resto de eventos de teclado?
    martes, 22 de mayo de 2012 6:56
  • Hola

    Prueba esto

    Private ctl As DataGridViewTextBoxEditingControl

    Private Sub dataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then ctl = CType(e.Control, DataGridViewTextBoxEditingControl) AddHandler ctl.TextChanged, AddressOf TextBox_TextChanged End If End Sub Private Sub TextBox_TextChanged(sender As System.Object, e As System.EventArgs) Codi = ctl.Text End Sub Private Sub DataGridView1_CellEndEdit(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit If ctl IsNot Nothing Then RemoveHandler ctl.TextChanged, AddressOf TextBox_TextChanged ctl = Nothing End If End Sub

    Este tema lo comenta leandro en su blog, solo hay que adaptarlo a las necesidades

    http://ltuttini.blogspot.com.es/2010/05/datagridview-texto-celdas-en-mayuscula.html



    • Editado ToniAG jueves, 24 de mayo de 2012 16:16
    • Marcado como respuesta Eder CostaModerator miércoles, 30 de mayo de 2012 15:25
    jueves, 24 de mayo de 2012 16:00
  • "deRuNoMas" escribió:

    > tengo un problema al capturar un texto en una celda de una datagridview

    Hola:

    Mejor será que te olvides de utilizar los eventos de teclado en el control DataGridView. Si tu intención es obtener el texto que se está escribiendo en una celda cualquiera del control DataGridView, tienes que referenciar el control TextBox que se "esconde" en las celdas normales del control DataGridView.

    Una vez referenciado dicho control TextBox, trabajarías con él como podrías trabajar con otro control TextBox que añadas a tu formulario.

    Añade a tu formulario los siguientes procedimientos:

       Private Sub Dgv1_EditingControlShowing( _
         sender As Object, e As DataGridViewEditingControlShowingEventArgs) _
         Handles Dgv1.DataGridViewEditingControlShowingEventArgs
         
         ' Referenciamos el control TextBox subyacente
         ' existente en la celda actual del control
         ' DataGridView.
         '
         Dim tb As TextBox = DirectCast(e.Control, TextBox)
         
         If (tb Is Nothing) Then Return
         
         ' Primero desinstalamos el controlador para
         ' el evento TextChanged del control TextBox
         ' y después lo volvemos a instalar.
         '
         RemoveHandler tb.TextChanged, AddressOf TextBoxOnTextChanged
         AddHandler tb.TextChanged, AddressOf TextBoxOnTextChanged
              
        End Sub
        
        Private Sub TextBoxOnTextChanged(sender As Object, e As EventArgs)
         
         ' Control TextBox que ha desencadenado el evento.
         '
         Dim tb As TextBox = DirectCast(sender, TextBox)
         
         ' Vamos escribiendo en la consola el valor
         ' actual del control TextBox.
         '
         Console.WriteLine(tb.Text)
        
        End Sub

    Para más información sobre cómo detectar la tecla pulsada en un control DataGridView, te aconsejaría que le echaras un vistazo al siguiente artículo:

    Cómo detectar la tecla pulsada en una celda del control DataGridView

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    jueves, 24 de mayo de 2012 16:15
    Moderador
  • Hola SoftJaén

    Basicamente es lo que comentaba yo, no? aunque deberia de declararlo como TextBox (pero funciona tambien), e revisado tu articulo y podria quedar a sín, no.

        WithEvents TextBoxCell As TextBox
    
        Private Sub dataGridView1_EditingControlShowing(ByVal sender As Object,
                                                        ByVal e As DataGridViewEditingControlShowingEventArgs) _
                                                Handles DataGridView1.EditingControlShowing
    
            ' nos aseguramos que el control de edicion sea TextBox
            If TypeOf e.Control Is TextBox Then TextBoxCell = CType(e.Control, TextBox)
    
        End Sub
    
        Private Sub TextBox_TextChanged(sender As Object, e As EventArgs) Handles TextBoxCell.TextChanged
    
            Codi = TextBoxCell.Text
    
        End Sub
    
        Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
    
            If TextBoxCell IsNot Nothing Then TextBoxCell = Nothing
    
        End Sub


    • Editado ToniAG jueves, 24 de mayo de 2012 16:51
    jueves, 24 de mayo de 2012 16:48
  • "ToniAG" escribió:

    > Basicamente es lo que comentaba yo, no?

    Hola, ToniAG:

    ¡Pues sí!

    > e revisado tu articulo y podria quedar a sín, no.
    >

    El mismo código se puede escribir de diversas maneras. ;-)

    > WithEvents TextBoxCell As TextBox

    En éste caso estás declarando con eventos una variable objeto del tipo TextBox, de ésta manera no es necesario añadir y eliminar el controlador para el evento TextChanged. Pero tampoco pasa nada del otro mundo que primero se elimine el controlador (RemoveHandler no produce una excepción si el evento no se encuentra instalado), y después se añada de nuevo.

    A veces me encuentro más a gusto instalando y eliminando un controlador de eventos en tiempo de ejecución.

    >  If TextBoxCell IsNot Nothing Then TextBoxCell = Nothing

    Te comento que no es necesario verificar si la variable objeto es o no Nothing, porque nunca vas a obtener una excepción cuando se asigna el valor Nothing a una variable objeto:

       ' Esto nunca producirá un error, sea o no
       ' Nothing la variable objeto TextBoxCell.
       '
       TextBoxCell = Nothing

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.


    viernes, 25 de mayo de 2012 5:54
    Moderador