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

VB.NET如何取消DataGridView复选框列的单元格选中状态

VB.NET DataGridView复选框列点击禁止单元格高亮实现

需求描述

  • 交互要求:单击/双击复选框列单元格时,仅切换复选框勾选状态,不触发单元格选中高亮
  • 当前效果:当前交互:点击复选框会触发单元格选中高亮
  • 目标效果:目标交互:点击复选框无单元格高亮

现有业务代码

列显隐控制逻辑

If BtnVistaPorFacturar.Checked Then
    For i As Integer = 0 To DgvNeumaticos.Columns.Count - 1
        DgvNeumaticos.Columns(i).Visible = False
    Next

    DgvNeumaticos.Columns("ColChk").Visible = True
    DgvNeumaticos.Columns("CodOS").Visible = True
    DgvNeumaticos.Columns("Tipo").Visible = True
    DgvNeumaticos.Columns("NroOrden").Visible = True
    DgvNeumaticos.Columns("NroOrden").DisplayIndex = 0
    DgvNeumaticos.Columns("FechaOS").Visible = True
    DgvNeumaticos.Columns("F.Cierre").Visible = True
    DgvNeumaticos.Columns("Observacion").Visible = True
    DgvNeumaticos.Columns("CodNeumatico").Visible = True
    DgvNeumaticos.Columns("Externo").Visible = True
    DgvNeumaticos.Columns("CodTercero").Visible = True
    DgvNeumaticos.Columns("CodProducto").Visible = True
    DgvNeumaticos.Columns("Producto").Visible = True
    DgvNeumaticos.Columns("Trabajo").Visible = True
    DgvNeumaticos.Columns("NroDocRecepcion").Visible = True
    DgvNeumaticos.Columns("FechaRecepcion").Visible = True

复选框列初始化逻辑

If BtnVistaPorFacturar.Checked Then
    Dim chkCol As New DataGridViewCheckBoxColumn
    chkCol.Name = "ColChk"
    chkCol.HeaderText = "Chk"
    DgvNeumaticos.Columns.Add(chkCol)

    dt = WFOrdServicioNeumaticos.Instancia.fdu_NEUM_ORDSERV_VerOrdenesPorFacturar(.Cells("IDAgente").Value)
End If

实现代码

直接给DgvNeumaticos控件绑定两个事件即可,不需要修改原有列初始化、显隐逻辑:

' 初始化时绑定事件,可放在窗体构造函数、Load事件中执行
AddHandler DgvNeumaticos.CurrentCellDirtyStateChanged, AddressOf DgvNeumaticos_InstantCommitCheck
AddHandler DgvNeumaticos.CellMouseUp, AddressOf DgvNeumaticos_ClearCellSelectionOnCheckClick

' 实现点击复选框即时提交编辑,无需失去焦点才切换勾选状态
Private Sub DgvNeumaticos_InstantCommitCheck(sender As Object, e As EventArgs)
    If DgvNeumaticos.IsCurrentCellDirty AndAlso DgvNeumaticos.CurrentCell.OwningColumn.Name = "ColChk" Then
        DgvNeumaticos.CommitEdit(DataGridViewDataErrorContexts.Commit)
    End If
End Sub

' 点击复选框列后清除单元格选中,避免出现高亮效果
Private Sub DgvNeumaticos_ClearCellSelectionOnCheckClick(sender As Object, e As DataGridViewCellMouseEventArgs)
    ' 排除表头行、无效行,仅处理复选框列的单元格点击
    If e.ColumnIndex = DgvNeumaticos.Columns("ColChk").Index AndAlso e.RowIndex >= 0 Then
        DgvNeumaticos.ClearSelection()
        ' 如果需要保留整行选中效果(而非单个单元格高亮),取消注释下一行即可
        ' DgvNeumaticos.Rows(e.RowIndex).Selected = True
    End If
End Sub

可选优化:将DgvNeumaticos.SelectionMode属性设置为FullRowSelect,配合上述代码可以完全避免单个单元格高亮,和目标演示效果完全匹配。

内容的提问来源于stack exchange,提问作者lsanchezo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:15:38