Solución: Obtener el valor de la columna tipo check Para las columnas tipo check, Microsoft recomienda realizar, primero, lo siguiente:
'Esto es casi copiar y pegar Private Sub DataGridView1_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged 'Obligatorio para columnas tipo check If DataGridView1.IsCurrentCellDirty Then DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit) End If End Sub
Las líneas anteriores son para... algo. En realidad no se el significado completo, pero más o menos es para que la aplicación guarde internamente los cambios realizados al check.
De allí, para saber el valor del check es lo siguiente:
DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value 'O mejor dicho: DataGridView1.Rows(fila).Cells(columna).Value
El valor 1 significa que el check está marcado (con un visto) y el valor 0 significa que no está marcado (en blanco).
Un ejemplo es cuando se desea obtener el valor del check una vez que el usuario lo haya presionado, en este caso lo utilizo así:
Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick 'El evento CellContentClick indica que el usuario ha hecho clic en un campo y su valor ha cambiado Dim valorCheck as Integer 'Pregunto si el campo que se hizo clic es el del check If e.ColumnIndex = DataGridView1.Columns(0).Index Then valorCheck = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value 'valorCheck obtiene 0 o 1 End If End Sub
También se puede usar de forma directa, después de que el usuario ha terminado de editar y se desea saber el valor del campo antes de utilizarlo. Para ello uso un proceso que va por cada línea del DataGridView recorriéndolo.
Dim valorCheck as Integer For Each row As DataGridViewRow In DataGridView1.Rows 'Recorro todo el grid fila por fila valorCheck = CInt(row.Cells(0).Value) Next
Espero que hayan comprendido.