none
Problema al controlar un checkBox en una datagridview

    Pregunta

  • hola todos,

    He intentado controlar un checkbox en una datagridview y no he podido:

    tengo una datagridview (dgv) que tiene una columna definida como DataGridViewCheckBoxCell llamada colCheck

    Mi idea es que cuando seleccione el check de un registro una columna llamada valor que es decimal sume al valor de un textBox (txtTotal) del formulario. Ahora bien, cuando a la celda le quitamos el check reste al valor del txtTotal.

    Tomé una porción de codigo del blog de Leandro (WinDataGridViewCheck) y no sé que hice mal que no me funciona.

    Aparece este error:

    Este es el código que uso:

    Private Sub dgvSearch_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvSearch.CellContentClick
            '
            ' Detecta si se ha seleccionado el header de la grilla
            '
            If e.RowIndex = -1 Then
                Return
            End If
    
            If dgvSearch.Columns(e.ColumnIndex).Name = "colCheck" Then
    
                '
                ' Se toma la fila seleccionada
                '
                Dim row As DataGridViewRow = dgvSearch.Rows(e.RowIndex)
    
                '
                ' Se selecciona la celda del checkbox
                '
                Dim cellSelecion As DataGridViewCheckBoxCell = TryCast(row.Cells("colCheck"), DataGridViewCheckBoxCell)
    
    
                If CBool(cellSelecion.Value) Then
    
                    MessageBox.Show("True", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
    
                Else
    
                    MessageBox.Show("False", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
    
                End If
            End If
        End Sub
    
        ' If a check box cell is clicked, this event handler disables   
        ' or enables the button in the same row as the clicked cell. 
        Public Sub dgvSearch_CellValueChanged(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) _
                                                                                Handles dgvSearch.CellValueChanged
            '
            ' Solo se trabaja ante los cambios en la columan de los checkbox 
            '
            If dgvSearch.Columns(e.ColumnIndex).Name = "colCheck" Then
                
                ' Se toma la fila seleccionada
                '
                Dim row As DataGridViewRow = dgvSearch.Rows(e.RowIndex)
    
                '
                ' Se selecciona la celda del checkbox
                '
                Dim cellSelecion As DataGridViewCheckBoxCell = TryCast(row.Cells("colCheck"), DataGridViewCheckBoxCell)
    
                '
                ' Se valida si esta checkeada
                '
                If CBool(cellSelecion.Value) Then
    
                    'Dim mensaje As String = String.Format("Evento CellValueChanged.{0}{0}Se ha seccionado, {0}Descripcion: '{1}', {0}Precio Unitario: '{2}',{0}Medida: '{3}'", _
                    '                                      vbLf, _
                    '                                      row.Cells("Descripcion").Value, _
                    '                                      row.Cells("PrecioUnitario").Value, _
                    '                                      row.Cells("UnidadMedida").Value)
    
    
                    MessageBox.Show("change true", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
    
                End If
            End If
    
        End Sub
    
        Private Sub dgvSearch_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgvSearch.CurrentCellDirtyStateChanged
    
            If dgvSearch.IsCurrentCellDirty Then
                dgvSearch.CommitEdit(DataGridViewDataErrorContexts.Commit)
            End If
    
        End Sub

    Les Agradezco su ayuda


    Saludos, Solph.

    lunes, 22 de octubre de 2012 13:39

Respuestas

  • pero el problema alli es que la columan del check esta tomando un dbnull, deberias validarlo

    If cellSelecion.Value IsNot DbNull.Value AndAlso CBool(cellSelecion.Value) Then


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Solp lunes, 22 de octubre de 2012 17:48
    lunes, 22 de octubre de 2012 13:54

Todas las respuestas