如何在取消勾选DataGridView中的CheckBox时清空TextBox?
解决DataGridView取消CheckBox勾选时清空TextBox的问题
你的代码当前存在两个核心问题:一是单选逻辑有bug(点击后所有CheckBox都会被设为False,无法真正选中),二是没有判断CheckBox的状态来决定填充还是清空控件。以下是修正后的完整代码及说明:
修正后的CellContentClick事件代码
Private Sub DataGridView2_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView2.CellContentClick ' 仅处理CheckBox列(索引0)和有效行 If e.ColumnIndex = 0 AndAlso e.RowIndex >= 0 Then Dim chkColumn As DataGridViewCheckBoxColumn = DirectCast(DataGridView2.Columns(e.ColumnIndex), DataGridViewCheckBoxColumn) Dim currentCell As DataGridViewCheckBoxCell = DirectCast(DataGridView2.Rows(e.RowIndex).Cells(e.ColumnIndex), DataGridViewCheckBoxCell) ' 获取点击后的最终勾选状态(CellContentClick触发时,控件状态已切换) Dim isChecked As Boolean = Not Convert.ToBoolean(currentCell.Value) ' 单选逻辑:取消其他所有行的勾选 For Each row As DataGridViewRow In DataGridView2.Rows If row.Index <> e.RowIndex Then row.Cells(chkColumn.Name).Value = False End If Next ' 设置当前行的CheckBox状态 currentCell.Value = isChecked ' 根据勾选状态处理控件 If isChecked Then ' 勾选时填充数据到控件 TBterug.Text = DataGridView2.Rows(e.RowIndex).Cells("Todo").Value.ToString() CBbelangrijkterug.Text = DataGridView2.Rows(e.RowIndex).Cells("Belangrijk").Value.ToString() Id.Text = DataGridView2.Rows(e.RowIndex).Cells("Id").Value.ToString() LBdelete.Visible = True LBuncheck.Visible = True Else ' 取消勾选时清空控件并隐藏标签 TBterug.Text = String.Empty CBbelangrijkterug.Text = String.Empty Id.Text = String.Empty LBdelete.Visible = False LBuncheck.Visible = False End If End If End Sub
关键修改说明
- 修复单选逻辑:不再将所有行的CheckBox设为False,而是仅取消其他行的勾选,当前行的状态由点击操作决定,确保单选功能正常。
- 状态判断:通过
isChecked变量获取点击后的最终状态,以此分支处理“填充控件”和“清空控件”两种场景。 - 准确获取行数据:直接使用
e.RowIndex定位点击的行,避免CurrentRow可能带来的行定位错误。
内容的提问来源于stack exchange,提问作者Bas H
相关产品推荐
相关产品推荐

