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

VB.NET连接MySQL时DataGridView随Box No.变更自动刷新显示的实现问题

实现方案

你可以通过DataView行过滤能力实现显示切换,全程不会修改原始数据,也不需要反复查询数据库,性能更优。

步骤1:声明全局存储变量

把全量数据存在窗体级变量中,仅初始化时加载一次,避免每次切换都清数据、查库:

' 窗体级别声明,存储所有箱号的原始数据
Private allBoxData As New DataTable()
Private conn As New deepconnection()

步骤2:窗体初始化时加载全量数据

Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' 关联查询拉取所有箱号的全量数据
    Dim joinCmd As New MySqlCommand("SELECT boxno, specie, netweight, projectcode, loin FROM loins INNER JOIN boxing ON loins.code = boxing.loin ORDER BY loincode", conn.getConnection)
    Dim adapter As New MySqlDataAdapter(joinCmd)
    
    conn.openOcean()
    adapter.Fill(allBoxData)
    conn.Close()
    
    ' 初始化DataGridView列绑定规则,仅需设置一次
    DataGridView1.AutoGenerateColumns = False
    DataGridView1.Columns(0).DataPropertyName = "boxno"
    DataGridView1.Columns(1).DataPropertyName = "specie"
    DataGridView1.Columns(2).DataPropertyName = "netweight"
    DataGridView1.Columns(3).DataPropertyName = "loin"
    DataGridView1.Columns(4).DataPropertyName = "projectcode"
End Sub

步骤3:箱号变更时执行显示过滤

在箱号选择控件(ComboBox/输入框)的变更事件中添加过滤逻辑,仅切换显示内容,不会修改原始全量数据:

Private Sub BoxNo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboBoxNo.SelectedIndexChanged
    ' 无数据时直接退出
    If allBoxData Is Nothing OrElse allBoxData.Rows.Count = 0 Then Exit Sub
    
    Dim currentBoxNo As String = cboBoxNo.Text.Trim()
    ' 构造DataView做行过滤,仅显示当前选中箱号的数据
    Dim dataView As New DataView(allBoxData)
    ' 单引号转义避免语法报错
    dataView.RowFilter = $"boxno = '{currentBoxNo.Replace("'", "''")}'"
    
    DataGridView1.DataSource = dataView
End Sub

补充说明

  • 如果你的箱号为数值类型,可去掉过滤条件里的单引号,写法改为dataView.RowFilter = $"boxno = {currentBoxNo}"
  • 如需实时同步数据库最新数据,可加定时器定期重新拉取allBoxData全量数据,拉取完成后重新执行当前箱号的过滤逻辑即可
  • 界面示例如下:
    DataGridView界面

内容的提问来源于stack exchange,提问作者Abd Domingos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:18:04