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

DataGridView数据匹配按钮禁用异常:代码仅触发Else分支问题排查

问题分析与解决

你的代码问题出在check_available的循环逻辑上:

  • 你先遍历DataGridView的每一行,再对每个按钮做判断。每处理一行数据时,所有按钮都会被重新设置状态,最后一行数据的判断会覆盖之前所有行的设置,导致只有最后一行匹配的按钮会变红,其他按钮全被设为绿色,看起来就像只触发了Else分支。

要保留Else分支的重置功能,正确的逻辑应该是:

  1. 先把所有按钮统一重置为绿色、可用状态(满足切换标签页无数据时的重置需求)
  2. 再遍历DataGridView的行,把匹配的按钮改为红色、不可用状态

修改后的check_available代码如下:

Sub check_available()
    Try
        ' 第一步:先重置所有按钮为默认状态(绿色、可用)
        For Each btn In TabPage4.Controls
            If TypeOf btn Is Button Then
                btn.BackColor = Color.Green
                btn.Enabled = True
            End If
        Next

        ' 第二步:遍历数据行,标记已占用的按钮
        For Each row As DataGridViewRow In DataGridView1.Rows
            ' 跳过DataGridView自动生成的空行
            If Not row.IsNewRow Then
                For Each btn In TabPage4.Controls
                    If TypeOf btn Is Button Then
                        If row.Cells(0).Value.ToString() = btn.Text Then
                            btn.BackColor = Color.Red
                            btn.Enabled = False
                            ' 找到匹配按钮后跳出内层循环,提升效率
                            Exit For
                        End If
                    End If
                Next
            End If
        Next
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

额外优化点:

  • 增加Not row.IsNewRow判断,避免DataGridView自动生成的空行引发错误
  • 找到匹配按钮后用Exit For跳出内层循环,减少不必要的遍历操作

内容的提问来源于stack exchange,提问作者Jhoseph Eugene Caleon Reyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:23:12