Visual Studio(VB优先)实现CSV驱动双combo box联动查询展示功能
基于Visual Studio的VB参赛人员信息联动查询实现
本次开发基于Visual Studio环境,优先采用VB代码实现相关功能,功能实现要求如下:
- 程序启动阶段完成CSV文件数据读取,完成两个组合框(ComboBox)的选项填充
- 实现组合框联动:选中*组别(Section)*组合框的取值后,*参赛编号(Competitor Number)*组合框仅展示对应组别下的可选参赛编号
- 结合两个组合框的选中取值,展示对应的参赛人员姓名,切换组合框选项时姓名同步更新
核心实现代码
1. 全局数据结构定义
首先在窗体代码头部定义数据存储结构和全局列表,用于存储读取到的所有参赛人员信息:
Imports System.IO Imports System.Text Public Class MainForm ' 定义参赛人员信息结构 Structure CompetitorInfo Public Section As String Public CompNumber As String Public Name As String End Structure ' 全局存储所有参赛人员数据 Dim allCompetitors As New List(Of CompetitorInfo)
2. 启动阶段CSV读取与初始下拉框填充
在窗体加载事件中完成CSV数据读取和组别下拉框的初始化填充:
Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' 替换为实际CSV文件存储路径 Dim csvFilePath As String = "D:\competitors.csv" ' 读取CSV所有行数据 Dim csvRows As String() = File.ReadAllLines(csvFilePath, Encoding.Default) For Each row In csvRows Dim fieldArr As String() = row.Split(",") ' 仅处理列数符合要求的有效行 If fieldArr.Length >= 3 Then allCompetitors.Add(New CompetitorInfo With { .Section = fieldArr(0).Trim(), .CompNumber = fieldArr(1).Trim(), .Name = fieldArr(2).Trim() }) End If Next ' 给组别下拉框填充去重后的组别值 cboSection.DataSource = allCompetitors.Select(Function(c) c.Section).Distinct().ToList() End Sub
3. 组合框联动逻辑
在组别下拉框的选中值变更事件中,过滤对应组别下的参赛编号填充到第二个下拉框:
Private Sub cboSection_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboSection.SelectedIndexChanged ' 无选中值时直接退出 If cboSection.SelectedItem Is Nothing Then cboCompNumber.DataSource = Nothing lblShowName.Text = String.Empty Exit Sub End If Dim currentSection As String = cboSection.SelectedItem.ToString() ' 过滤当前组别下的所有参赛编号,去重后填充 Dim validNumbers = allCompetitors.Where(Function(c) c.Section = currentSection).Select(Function(c) c.CompNumber).Distinct().ToList() cboCompNumber.DataSource = validNumbers End Sub
4. 参赛人员姓名同步展示
在参赛编号下拉框的选中值变更事件中,匹配对应人员姓名并展示:
Private Sub cboCompNumber_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCompNumber.SelectedIndexChanged If cboSection.SelectedItem Is Nothing OrElse cboCompNumber.SelectedItem Is Nothing Then lblShowName.Text = String.Empty Exit Sub End If Dim currentSection As String = cboSection.SelectedItem.ToString() Dim currentNumber As String = cboCompNumber.SelectedItem.ToString() ' 匹配对应参赛人员信息 Dim targetPerson = allCompetitors.FirstOrDefault(Function(c) c.Section = currentSection AndAlso c.CompNumber = currentNumber) lblShowName.Text = If(String.IsNullOrEmpty(targetPerson.Name), "未查询到对应人员信息", targetPerson.Name) End Sub End Class
注意说明
- 示例代码中控件命名约定:组别组合框为
cboSection、参赛编号组合框为cboCompNumber、姓名展示标签为lblShowName,可根据实际界面控件命名调整 - CSV文件默认列顺序为「组别,参赛编号,姓名」,如果实际CSV列顺序不同,可调整
fieldArr的索引取值 - 可根据需求新增CSV格式校验、空值处理等额外逻辑
内容的提问来源于stack exchange,提问作者Joseph Siccita
相关产品推荐
相关产品推荐

