DataGridView关联RadioButton切换行后,F值单选按钮无法选中求助
问题描述
程序加载时能自动选中DataGridView首行对应的rbtnM,但切换DataGridView行后,F值对应的rbtnF无法被选中,始终保持rbtnM处于选中状态。
填充DataGridView代码
Private Sub FrmEtudiant_Load(sender As Object, e As EventArgs) Handles MyBase.Load Try daEtu.Fill(DsEtu1.T_etudiants) If DsEtu1.T_etudiants.Rows.Count > 0 Then btnModifierEtu.Enabled = True btnEnleverEtu.Enabled = True Ligne_Courante = 0 Remplir_Ecran() Else Ligne_Courante = -1 End If 'createXMLProg() 'DsProg1.ReadXml("programmes.xml") 'DsProg1.ReadXmlSchema("programmes.xsd") Catch ex As SqlException MsgBox(ex.Number & "" & ex.Message) Catch ex As Exception MsgBox(ex.Message) End Try End Sub
单选按钮选中逻辑代码
Private Sub Remplir_Ecran() Dim ligne As DSEtu.T_etudiantsRow ligne = DsEtu1.T_etudiants(Ligne_Courante) If ligne.etu_sexe.Contains("M") Then rbtnM.Checked = True ElseIf ligne.etu_sexe.Contains("F") Then rbtnF.Checked = True End If Try DsEtu1.T_etudiants.Clear() daEtu.Fill(DsEtu1.T_etudiants) Catch ex As Exception MsgBox(ex.Message) End Try End Sub
问题原因及解决方法
核心问题
- 重复填充数据集:
Remplir_Ecran方法末尾的Clear()和Fill()操作会重置数据集,导致后续切换行时,Ligne_Courante对应的行数据被覆盖,无法正确获取当前选中行的性别值。 - 判断逻辑不严谨:使用
Contains判断性别可能存在误判(比如字段包含其他字符时),且未明确处理单选按钮的互斥状态更新。
修复方案
- 移除重复填充代码:数据集填充仅在窗体加载时执行一次,
Remplir_Ecran只负责更新界面控件状态:
Private Sub Remplir_Ecran() Dim ligne As DSEtu.T_etudiantsRow ligne = DsEtu1.T_etudiants(Ligne_Courante) ' 直接匹配性别值,明确设置两个单选按钮的状态 rbtnM.Checked = (ligne.etu_sexe = "M") rbtnF.Checked = (ligne.etu_sexe = "F") End Sub
- 绑定行切换事件:在DataGridView的行选择变化事件中更新
Ligne_Courante并触发界面刷新:
Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged If DataGridView1.SelectedRows.Count > 0 Then Ligne_Courante = DataGridView1.SelectedRows(0).Index Remplir_Ecran() End If End Sub
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

