none
Cómo asigno desde código un valor a un control Checkbox de un control DataGridView

    Pregunta

  • He definido la propiedad ColumnType de una de las columnas del DatagridView como: DataGridViewCheckBoxColumn

    ¿Cómo cambio el valor de esta columna desde código?

    ¿O sea cómo indico desde el código que esté activada o desactivada?

    jueves, 29 de septiembre de 2016 20:57

Respuestas

  • Hola James-2016,

    La columna checkBox se generará a todos los atributos que sean de tipo Boolean.

    Mira un ejemplo :

     Public Class MiClase
            Public Property nombre As String
            Public Property estado As Boolean
        End Class
    
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    
            Dim lista As New List(Of MiClase) From
                    {
                         New MiClase() With {
                                .nombre = "James",
                                .estado = True}
                     }
    
            DataGridView1.DataSource = lista
    
        End Sub

    Resultado :

    Solo cambias el valor a la propiedad y este se reflejará en el ON/OFF del check.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 jueves, 29 de septiembre de 2016 22:44
    jueves, 29 de septiembre de 2016 22:35
  • Si te entendi bien ¿lo que me dices es que basta que tenga una propiedad boolean que se corresponda con la columna del DataGridView para que tome su valor?

    Entonces, esto debe funcionar también con el checkbox?

    DataGridView1.DataSource = lista

    Claro, debes de definir la clase con la propiedad Booleana y al vincular al objeto establecerá el estado de la celda según el valor de la propiedad:

    Public Class Empleado
            Property Nombre As String
            Property Cargo As String
            Property Activo As Boolean
    End Class
    
    
    
    Dim Empleados As New List(Of Empleado)
    
    Empleados.Add(New Empleado() With {.Nombre = "Juan", .Cargo = "Gerente", .Activo = True})
    Empleados.Add(New Empleado() With {.Nombre = "Mario", .Cargo = "Supervisor", .Activo = False})
    
    DataGridView1.DataSource = Empleados


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta James-2016 jueves, 29 de septiembre de 2016 22:44
    jueves, 29 de septiembre de 2016 22:41

Todas las respuestas

  • Hola James-2016,

    La columna de tipo DataGridViewCheckBoxColumn se maneja con valores Boolean, solo debes asignar True para seleccionar o false para quitar el check.

    [-] ... ¿Cómo cambio el valor de esta columna desde código?

    Si necesitas cambiar los valores de toda la columna solo tienes que realizar un loop.

           'Seleccionamos todos los checkBox de la columna 1 (pos 0)
            For Each fila As DataGridViewRow In DataGridView1.Rows
                fila.Cells(0).Value = True
            Next

    Y para una celda en particular es practicamente lo mismo.

      'Columna 1, fila 0
       DataGridView1.Rows(0).Cells(1).Value = True

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 29 de septiembre de 2016 21:25
  • Gracias por responder, es eso lo que preguntaba pero hay un detalle no se si se puede o necesariamente tendría que hacerlo así.

    El detalle es que:

    El control no es enlazado a datos de una base sino que le asigno los datos desde una lista, entonces ya tengo los valores de cada columna en la lista y hago esto para asignarlos al DataGridView:

    DataGridView1.DataSource = lista

    lista contiene valores de una clase cuyas propiedades a su vez corresponden a cada columna del DataGridView, la mayoría son de texto y algunas tipo lista y tipo checkbox, para las columnas cuyos valores son de texto o contienen un control tipo lista desplegable funciona bien se asignan los valores pero para los que son checkbox no le asigna nada.

    Entonces la consulta ahora es si hay alguna manera de que tome el valor respectivo de la lista o necesariamente tengo que hacerlo como el código proporcionado para los controles checkbox (obviamente asignando el valor de la lista respectivo)?



    • Editado James-2016 jueves, 29 de septiembre de 2016 22:07
    jueves, 29 de septiembre de 2016 22:05
  • James-2016,

    Si vinculas los datos mediante una lista debería esperarse que también tengas una propiedad que mapee una columna booleana, algo como:

    '...
    Property EsDisponible As Boolean
    '...

    Dicha propiedad contendrá valores True o False que establecerán el estado de la celda.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 29 de septiembre de 2016 22:19
  • Si te entendi bien ¿lo que me dices es que basta que tenga una propiedad boolean que se corresponda con la columna del DataGridView para que tome su valor?

    Entonces, esto debe funcionar también con el checkbox?

    DataGridView1.DataSource = lista

    jueves, 29 de septiembre de 2016 22:32
  • Hola James-2016,

    La columna checkBox se generará a todos los atributos que sean de tipo Boolean.

    Mira un ejemplo :

     Public Class MiClase
            Public Property nombre As String
            Public Property estado As Boolean
        End Class
    
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    
            Dim lista As New List(Of MiClase) From
                    {
                         New MiClase() With {
                                .nombre = "James",
                                .estado = True}
                     }
    
            DataGridView1.DataSource = lista
    
        End Sub

    Resultado :

    Solo cambias el valor a la propiedad y este se reflejará en el ON/OFF del check.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 jueves, 29 de septiembre de 2016 22:44
    jueves, 29 de septiembre de 2016 22:35
  • Si te entendi bien ¿lo que me dices es que basta que tenga una propiedad boolean que se corresponda con la columna del DataGridView para que tome su valor?

    Entonces, esto debe funcionar también con el checkbox?

    DataGridView1.DataSource = lista

    Claro, debes de definir la clase con la propiedad Booleana y al vincular al objeto establecerá el estado de la celda según el valor de la propiedad:

    Public Class Empleado
            Property Nombre As String
            Property Cargo As String
            Property Activo As Boolean
    End Class
    
    
    
    Dim Empleados As New List(Of Empleado)
    
    Empleados.Add(New Empleado() With {.Nombre = "Juan", .Cargo = "Gerente", .Activo = True})
    Empleados.Add(New Empleado() With {.Nombre = "Mario", .Cargo = "Supervisor", .Activo = False})
    
    DataGridView1.DataSource = Empleados


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta James-2016 jueves, 29 de septiembre de 2016 22:44
    jueves, 29 de septiembre de 2016 22:41
  • Gracias, muy ilustrativo el ejemplo, eso es lo que quería saber.
    • Editado James-2016 jueves, 29 de septiembre de 2016 22:45
    jueves, 29 de septiembre de 2016 22:44
  • Gracias, entonces sí se puede, trato de hacer eso pero no me aparece nada, algo por allí estoy haciendo mal, por lo menos ya tengo la seguridad que sí se puede.
    jueves, 29 de septiembre de 2016 22:45