You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在取消勾选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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:52:52