Datagridview赢得';t更改第一行的复选框(vb.net)

Datagridview赢得';t更改第一行的复选框(vb.net),vb.net,datagridview,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 Dire

我有一个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
我遇到的问题是,初始框(即第0行)从未更改为选中。我试过这些:

DirectCast(cameraTable(0, 0), DataGridViewCheckBoxCell).Value = True ' doesn't work 
cameraTable.Rows(0).Cells(0).Value = True ' doesn't work 
将框更改为选中,但列中的其他行更改时不会出现问题。我甚至做了一个msgbox打印出值,结果是“真的”。因此,复选框的值已更改,但datagridview中的复选框仍处于未选中状态。有什么想法吗

谢谢你的帮助


-K

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


如果所有其他操作都失败,请在设置值后重新加载网格,方法是将datasource设置为nothing,然后返回到原来的状态。

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


将复选框的列宽设为20而不是18

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

谢谢


注:这不是开玩笑,这是一个bug。

Hmm,它与我用鼠标自然选择的蓝色行直接相关。有没有办法通过程序删除该选择?请致电DataGridView的感谢stuartd!我刚刚尝试过(camertable.clearselection()),但仍然没有改变框值。嗯。在设置了
true
之后,你确定没有在某个地方设置
false
吗?ClearSelection不是最好的解决方案,最好将currentcell属性设置为单元格,而不是带有复选框的单元格(Dan的答案)。这也适用于C,它可能是这样的:DGV.currentcell=DGV.CurrentRow.Cells[2]。。。由于fullRowSelect的值为true,所以只要哪个单元格不是复选框所在的单元格,那么将其设置为当前单元格并没有什么区别
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