DataGridView数据匹配按钮禁用异常:代码仅触发Else分支问题排查
问题分析与解决
你的代码问题出在check_available的循环逻辑上:
- 你先遍历DataGridView的每一行,再对每个按钮做判断。每处理一行数据时,所有按钮都会被重新设置状态,最后一行数据的判断会覆盖之前所有行的设置,导致只有最后一行匹配的按钮会变红,其他按钮全被设为绿色,看起来就像只触发了Else分支。
要保留Else分支的重置功能,正确的逻辑应该是:
- 先把所有按钮统一重置为绿色、可用状态(满足切换标签页无数据时的重置需求)
- 再遍历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
相关产品推荐
相关产品推荐

