Datagridview不会更改第一行的复选框(vb.net)

时间:2014-03-26 20:37:02

标签: vb.net datagridview

我有一个datagridview(这里称为cameraTable)。 datagridview的一列纯粹是复选框。我有一个按钮,单击该按钮将检查列中的所有框,也就是全选。这是代码:

Private Sub btnSelectAll_Click(sender As Object, e As EventArgs) Handles btnSelectAll.Click

    For Each row As DataGridViewRow In cameraTable.Rows
        DirectCast(row.Cells("CheckBox"), DataGridViewCheckBoxCell).Value = _
            True
    Next
End Sub

我遇到的问题是初始框(即行零)永远不会更改为已选中。我试过这些:

DirectCast(cameraTable(0, 0), DataGridViewCheckBoxCell).Value = True ' doesn't work 
cameraTable.Rows(0).Cells(0).Value = True ' doesn't work 

既不更改要检查的框,也不更改列中的其他行而不会出现问题。我甚至做了一个打印出值的msgbox,结果证明是“真”。因此复选框的值已更改,但仍未选中datagridview中的复选框。有什么想法吗?

感谢您的帮助!

-K

3 个答案:

答案 0 :(得分:1)

对于当前选中的行/单元格,datagrid不会获取INotifyPropertyChanged事件(或不会处理它们)。如果您有其他可以编辑的列,请将焦点列移动到该列。

如果所有其他方法都失败了,请在设置datasource = nothing之后重新加载网格,然后再回到原来的状态。

答案 1 :(得分:1)

史蒂夫是对的。我所做的是当单击复选框时,我将焦点设置为该行上的另一个单元格(我的dgv设置为FullRowSelect):

Private Sub dgv_CellContentClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellContentClick
  If e.ColumnIndex = iCBColIDX Then
    dgv.CurrentCell = dgv.Rows(e.RowIndex).Cells("sts")
  End If
End Sub

答案 2 :(得分:0)

使复选框列宽度= 20而不是18。

不,我不知道为什么,但这有帮助。

感谢this man

PS。这不是一个笑话,它是一个错误。