none
Problema al capturar datos de un formulario desde un datagridview. RRS feed

  • Pregunta

  • Buenas tardes Compañeros.
    Les pido su colaboracion con el siguiente inconveniente.
    Lo que estoy codificando es que desde un datagridview cuando el foco lo tenga la columna 0 de cada fila y se presionan la tecla + me abrar un formulario en formal modal el cual me muestra el codigo del producto y su nombre. Cuando seleccionen un prouducto quiero llevar su codigo a la columna 0 y el nombre a la columna 1 de la fila que este seleccionada en ese momento de el datagridview.
    El asunto es que abro el formulario en forma modal con .Showdialog pero no me lleva el Id y el nombre del producto a las columns de la fila. Este es mi codigo:
    FrmNuevoQuimico.ShowDialog()
    Me.GridEntradas.Rows(GridEntradas.CurrentCell.RowIndex).Cells(GridEntradas.CurrentCell.ColumnIndex).Value=FrmNuevoQuimico.txtnmbre.Text
    Asi capturo por ejemplo el nombre del producto, pero no me lo asigna.
    Este codigo esta dentro de un manejador del evento keydown que le agrega a la columna del datagrid que es de tipo textbox.
    Muchas Gracias.
    martes, 1 de diciembre de 2009 21:00

Todas las respuestas

  • tienes los textbox con modificador publico para que sean accesibles
    en un principio si tienes bien el modificador en principio no deberia de dare problema

    yo cambiaria el evento al keypress..

    Mi Blog: Jtorrecilla
    martes, 1 de diciembre de 2009 21:07
    Moderador
  • Hola Jtorrecilla.
    Te explico por que elige el evento Keydown
    Es que lo que requiero es que si el foco lo tiene la columna 0 de la fila y presiona la tecla + necesito que se abra el formulario.
    Con el evento Keypress se ejecuta es cuando se escribe en esta columna no cuando tiene el foco y se presiona la tecla.
    Los textbox estan declarados como publicos puedo imprimir su valor desde el manejaador del evento keydown
    Gracias.
    martes, 1 de diciembre de 2009 21:15
  • Ok, a lo del evento.

    has comprobado el valor previo de donde estás asignando que sea correcto?

    Si es asi podrias postear todo elcódigo por si se nos ha pasado algo?

    Mi Blog: Jtorrecilla
    martes, 1 de diciembre de 2009 21:20
    Moderador
  • Hola

    Yo lo asignaría al BindingSource del que 'tira' el DataGridView

    Me.DataGridBindingSource.Current.Codigo = FrmNuevoQuimico.txtcodigo.Text
    Me.DataGridBindingSource.Current.Nombre = FrmNuevoQuimico.txtnmbre.Text


    Si te vale marca la respuesta como válida. Saludos
    martes, 1 de diciembre de 2009 21:25
  • Ok.

    Agrego los manejadores de eventos para la columna tipo textbox del datagridview
      Private Sub GridEntradas_EditingControlShowing1(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles GridEntradas.EditingControlShowing
            If TypeOf e.Control Is System.Windows.Forms.TextBox Then
                Dim validar As TextBox = CType(e.Control, TextBox)
                ' Agregar el controlador de eventos para el KeyPress  
                AddHandler validar.KeyDown, AddressOf validar_KeyDown
                AddHandler validar.KeyPress, AddressOf validar_Keypress
            End If
        End Sub
    Y este es el codigo que utilizo en el evento KeyDown
    Private Sub validar_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
            ' Obtener indice de la columna  
            Dim columna As Integer = GridEntradas.CurrentCell.ColumnIndex
            Dim txt As TextBox = CType(sender, TextBox)
    
            'Comprobar si la celda en edición corresponde a la columna 1 o 3  
            If columna = 0 Then
                'Obtener caracter  
                If e.KeyCode = Keys.C Then
                    FrmNuevoQuimico.ShowDialog()
                    'Asigno el nombre del quimico(producto) a la celda del datagridview seleccionada
                    Me.GridEntradas.Rows(GridEntradas.CurrentCell.RowIndex).Cells(GridEntradas.CurrentCell.ColumnIndex).Value = FrmNuevoQuimico.txtnombre.Text
                Else
                    e.Handled = True
                End If
            End If
    
    
    
        End Sub


    Y solo permito que se pueda escribir la letra C en la columna con el evento keypress
     Private Sub validar_Keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
            Dim caracter As Char = e.KeyChar
            If caracter = "c" Then
                e.Handled = False
            Else
                e.Handled = True
            End If
        End Sub
    
    • Editado Mariande martes, 1 de diciembre de 2009 21:35
    martes, 1 de diciembre de 2009 21:30
  • hola, veo q te falta asignarle el valo y otra cosa es q creo q el e.handled=true deberia estar despues de asignarlo al grid y en el else ponerlo a false...
    Mi Blog: Jtorrecilla
    martes, 1 de diciembre de 2009 21:35
    Moderador
  • Hola Fisli.
    En mi datagridview no existe bindinsource ya que no lo tengo enlazado a una fuente de datos por que mi capa de acceso a datos esta generada con un ORM.

    Y jtorrecilla a la celda del datagridview si le asigno el valor del textbox del formulario.

    Gracias por la colaboracion.
    martes, 1 de diciembre de 2009 21:40
  • has probado con lo q te dije del handled? cambiandolo de sitio?
    Mi Blog: Jtorrecilla
    miércoles, 2 de diciembre de 2009 7:16
    Moderador
  • Hola!

    ¿Fue posible solucionar su problema?

    Saludos!
    Rafael Fagundes - Marque la respuesta como correcta si te ha sido de utilidad!
    miércoles, 6 de enero de 2010 17:50
  • Hola Mariande, yo lo que veo es que haces el llamado de la forma de consulta:
     FrmNuevoQuimico.ShowDialog()
    y en la siguiente linea haces la asignacion del valor:
     Me.GridEntradas.Rows(GridEntradas.CurrentCell.RowIndex).Cells(GridEntradas.CurrentCell.ColumnIndex).Value=FrmNuevoQuimico.txtnmbre.Text

    pero cuando llamas una forma modal no se ejecuta el codigo de la linea de asignacion hasta que hayas cerrado la pantalla de consulta por lo cual al quere asignar el valor ya se perdieron estos, me imagino que en tu pantalla de consulta cierras esta cuando seleccionas un registro (porque no indicas que haces en la pantalla de consulta), bien en lugar de cerrar la pantalla ejecuta el siguiente codigo: pantalla_consulta.hide y con esto si se ejecutara la linea de asignacion del valor correctamente y no olvides despues de asignar el valor ejecutar el siguiente codigo: pantalla_consulta.close

    Espero te sirva este tip

    miércoles, 6 de enero de 2010 18:16