none
Cargar datos en textbox desde Datagridview

    Pregunta

  • Nuevamente por aquí solicitando ayuda, tengo la siguiente Sub:

    Public Sub CargarText()
            txt_Id_Trab.Text = CStr(dgv_Trabajador.CurrentRow.Cells(0).Value)
            txt_Nomb_Trab.Text = CStr(dgv_Trabajador.CurrentRow.Cells(1).Value)
            txt_Ap1_Trab.Text = CStr(dgv_Trabajador.CurrentRow.Cells(2).Value)
            txt_Ap2_Trab.Text = CStr(dgv_Trabajador.CurrentRow.Cells(3).Value)
            txt_Dni_Trab.Text = CStr(dgv_Trabajador.CurrentRow.Cells(4).Value)
            txt_Dir_Trab.Text = CStr(dgv_Trabajador.CurrentRow.Cells(5).Value)
            cbo_Id_Dist.Text = CStr(dgv_Trabajador.CurrentRow.Cells(6).Value)
            cbo_Id_Cargo.Text = CStr(dgv_Trabajador.CurrentRow.Cells(7).Value)
            cbo_Id_Ec.Text = CStr(dgv_Trabajador.CurrentRow.Cells(8).Value) ' Estado civil, guarda S,C,V,D (soltero,casado...)

            Dim fila = dgv_Trabajador.CurrentRow
            rbt_Masculino.Checked = CStr(fila.Cells(9).Value) = 1
            rbt_Femenino.Checked = CStr(fila.Cells(9).Value) = 2

            dtp_Fec_Nac_Trab.Text = CDate(dgv_Trabajador.CurrentRow.Cells(10).Value)
            dtp_Fec_Contrato_Trab.Text = CDate(dgv_Trabajador.CurrentRow.Cells(11).Value)
            dtp_Fec_Cese_Trab.Text = CDate(dgv_Trabajador.CurrentRow.Cells(12).Value)
            txt_Sueldo_Trab.Text = CStr(dgv_Trabajador.CurrentRow.Cells(13).Value)
            cbo_Id_Area.Text = CStr(dgv_Trabajador.CurrentRow.Cells(14).Value)
            cbo_Id_Horario.Text = CStr(dgv_Trabajador.CurrentRow.Cells(15).Value)

        End Sub

    Esto lo cargo en el levento CellClick de la grilla, a mi parecer todo esta bien pero al darle click me bota el sgte error:

    No entiendo por que quiere guardar un dato en una columna que no pertenece, y hasta ahora no encuentro como solucionarlo, espero puedan apoyarme, gracias. =)


    Juan Fernando


    lunes, 10 de octubre de 2016 4:34

Respuestas

  • JuanfernandoDj,

    ¿Qué tipo de columna tienes establecido para el índice 9? ¿DataGridViewTextBoxColumn? ¿DataGridViewCheckBoxColumn?

    En el ejemplo que muestras colocas un valor '1' para el genero masculino y '2' para el genero femenino, si son los valores contenidos en la columna no deberías tener problemas en obtener lo esperado.

    Si la columna es de tipo 'DataGridViewTextBoxColumn' tienes que colocar el valor de celda que corresponde con el genero, por ejemplo si tienes los valores 'Masculino' y 'Femenino'

    rbt_Masculino.Checked = CStr(fila.Cells(9).Value) = "Masculino"
    rbt_Femenino.Checked = CStr(fila.Cells(9).Value) = "Femenino"

    Por el contrario, si tuvieses una columna de tipo 'DataGridViewCheckBoxColumn' entonces debes de establecer el valor según el estado del control CheckBox asociado a la fila (siendo que el genero masculino corresponde a la casilla marcada):

    rbt_Masculino.Checked = CBool(fila.Cells(9).Value)
    rbt_Femenino.Checked = Not CBool(fila.Cells(9).Value)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Juan_fernando lunes, 10 de octubre de 2016 23:21
    lunes, 10 de octubre de 2016 15:41
  • Hola JuanfernandoDj,

    Pienso que no es necesario consultar el valor en ambos RadioButton, ya que si el primero está seleccionado por lógica el segundo no lo tiene que estar, ya que siempre permitirá seleccionar una opción.

    rbt_Masculino.Checked = CStr(fila.Cells("Genero").Value) = "Masculino"
    rbt_Femenino.Checked = Not rbt_Masculino.Checked

    Dónde : Si el rbt_Masculino esta seleccionado, el rbt_Femenino recibe la negación (no selecciona), y si no lo está el último lo selecciona.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Juan_fernando martes, 11 de octubre de 2016 0:29
    martes, 11 de octubre de 2016 0:09
  • Ok, gracias, aqui algo adicional, el detalle es que cuando le doy click a la grilla los radiobutton no se activan para saber si el registro corresponde a Sexo masculino o femenino,

    Juan Fernando

    • Marcado como respuesta Juan_fernando lunes, 10 de octubre de 2016 23:23
    lunes, 10 de octubre de 2016 6:31

Todas las respuestas

  • JuanfernandoDj,

    Primero sugerirte que uses el evento 'SelectionChanged' para establecer los valores a los objetos adyacentes, dicho evento se desencadena cuando la selección cambia, por tanto sería conveniente que la propiedad 'SelectionMode' este establecida en FullRowSelected:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
    	dgv_Trabajador.SelectionMode = DataGridViewSelectionMode.FullRowSelect        
    
    End Sub

    El procedimiento Function CargarText() debería ser invocado de la siguiente manera:

    Private Sub dgv_Trabajador_SelectionChanged(sender As Object, e ...
    
    	CargarText(dgv_Trabajador.CurrentRow)
    
    End Sub

    La implementación del procedimiento:

    Private Sub CargarText(fila As DataGridViewRow)
    
    	txt_Id_Trab.Text = CStr(fila.Cells(0).Value)
    	txt_Nomb_Trab.Text = CStr(fila.Cells(1).Value)
    	txt_Ap1_Trab.Text = CStr(fila.Cells(2).Value)
    	txt_Ap2_Trab.Text = CStr(fila.Cells(3).Value)
    	txt_Dni_Trab.Text = CStr(fila.Cells(4).Value)
    	txt_Dir_Trab.Text = CStr(fila.Cells(5).Value)
    	cbo_Id_Dist.Text = CStr(fila.Cells(6).Value)
    	cbo_Id_Cargo.Text = CStr(fila.Cells(7).Value)
    	cbo_Id_Ec.Text = CStr(fila.Cells(8).Value)
    	
    	rbt_Masculino.Checked = CStr(fila.Cells(9).Value) = "1"
    	rbt_Femenino.Checked = CStr(fila.Cells(9).Value) = "2"
    
    	dtp_Fec_Nac_Trab.Text = CDate(fila.Cells(10).Value)
    	dtp_Fec_Contrato_Trab.Text = CDate(fila.Cells(11).Value)
    	dtp_Fec_Cese_Trab.Text = CDate(fila.Cells(12).Value)
    	txt_Sueldo_Trab.Text = CStr(fila.Cells(13).Value)
    	cbo_Id_Area.Text = CStr(fila.Cells(14).Value)
    	cbo_Id_Horario.Text = CStr(fila.Cells(15).Value)
    End Sub

    La excepción que obtienes se produce porque no es posible convertir implícitamente un tipo String a un tipo Double, por tanto, si deseas comparar una cadena con un valor, procura que este sea del mismo tipo:

    rbt_Masculino.Checked = CStr(fila.Cells(9).Value) = "1"
    rbt_Femenino.Checked = CStr(fila.Cells(9).Value) = "2"



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 10 de octubre de 2016 6:19
  • Ok, gracias, aqui algo adicional, el detalle es que cuando le doy click a la grilla los radiobutton no se activan para saber si el registro corresponde a Sexo masculino o femenino,

    Juan Fernando

    • Marcado como respuesta Juan_fernando lunes, 10 de octubre de 2016 23:23
    lunes, 10 de octubre de 2016 6:31
  • JuanfernandoDj,

    ¿Qué tipo de columna tienes establecido para el índice 9? ¿DataGridViewTextBoxColumn? ¿DataGridViewCheckBoxColumn?

    En el ejemplo que muestras colocas un valor '1' para el genero masculino y '2' para el genero femenino, si son los valores contenidos en la columna no deberías tener problemas en obtener lo esperado.

    Si la columna es de tipo 'DataGridViewTextBoxColumn' tienes que colocar el valor de celda que corresponde con el genero, por ejemplo si tienes los valores 'Masculino' y 'Femenino'

    rbt_Masculino.Checked = CStr(fila.Cells(9).Value) = "Masculino"
    rbt_Femenino.Checked = CStr(fila.Cells(9).Value) = "Femenino"

    Por el contrario, si tuvieses una columna de tipo 'DataGridViewCheckBoxColumn' entonces debes de establecer el valor según el estado del control CheckBox asociado a la fila (siendo que el genero masculino corresponde a la casilla marcada):

    rbt_Masculino.Checked = CBool(fila.Cells(9).Value)
    rbt_Femenino.Checked = Not CBool(fila.Cells(9).Value)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Juan_fernando lunes, 10 de octubre de 2016 23:21
    lunes, 10 de octubre de 2016 15:41
  • Muchas gracias por el dato, adicional al codigo que me facilitaste verifique el porque del error en si, el detalle era que el estado civil es despues del genero...XDXDXD. muchas gracias, tema cerrado.


    Juan Fernando

    lunes, 10 de octubre de 2016 23:22
  • Muchas gracias por el dato, adicional al codigo que me facilitaste verifique el porque del error en si, el detalle era que el estado civil es despues del genero...XDXDXD. muchas gracias, tema cerrado.


    Juan Fernando

    Es recomendable que refieras a la columna por el nombre y no por la posición, que como vez lleva a veces a cometer errores:

    rbt_Masculino.Checked = CStr(fila.Cells("Genero").Value) = "Masculino"
    rbt_Femenino.Checked = CStr(fila.Cells("Genero").Value) = "Femenino"


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 10 de octubre de 2016 23:58
  • Hola JuanfernandoDj,

    Pienso que no es necesario consultar el valor en ambos RadioButton, ya que si el primero está seleccionado por lógica el segundo no lo tiene que estar, ya que siempre permitirá seleccionar una opción.

    rbt_Masculino.Checked = CStr(fila.Cells("Genero").Value) = "Masculino"
    rbt_Femenino.Checked = Not rbt_Masculino.Checked

    Dónde : Si el rbt_Masculino esta seleccionado, el rbt_Femenino recibe la negación (no selecciona), y si no lo está el último lo selecciona.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Juan_fernando martes, 11 de octubre de 2016 0:29
    martes, 11 de octubre de 2016 0:09
  • Gracias tambien es un buen dato...Joel C. Naupa Crispín

    Juan Fernando


    martes, 11 de octubre de 2016 0:29