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全量数据,拉取完成后重新执行当前箱号的过滤逻辑即可 - 界面示例如下:

内容的提问来源于stack exchange,提问作者Abd Domingos
相关产品推荐
相关产品推荐

