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

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

问题原因及解决方法

核心问题

  1. 重复填充数据集:Remplir_Ecran方法末尾的Clear()和Fill()操作会重置数据集,导致后续切换行时,Ligne_Courante对应的行数据被覆盖,无法正确获取当前选中行的性别值。
  2. 判断逻辑不严谨:使用Contains判断性别可能存在误判(比如字段包含其他字符时),且未明确处理单选按钮的互斥状态更新。

修复方案

  1. 移除重复填充代码:数据集填充仅在窗体加载时执行一次,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
  1. 绑定行切换事件:在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:40:29