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

VB.NET中如何用CheckBox实现DataGridView的两种查询数据填充

VB.NET CheckBox控制DataGridView数据填充问题排查与修复

核心问题分析

  1. 未勾选CheckBox时无数据操作逻辑:当CheckBox1未勾选时,仅定义了SQL查询语句,但没有执行数据填充、数据源绑定操作,导致DataTable为空,GridView自然无数据。
  2. 变量作用域与逻辑冗余:query变量在If/Else代码块内定义,属于局部变量,且Else块内重复判断CheckBox1.Checked=True,完全多余。
  3. 连接对象使用错误:如果cn是OleDbConnection对象,cn.ToString返回的是对象的字符串描述,并非有效连接字符串,应直接传入cn对象本身。
  4. 列可见性设置重复:两种查询场景下的列可见性规则一致,没必要仅在Else块内执行。

修复后的代码

Private Sub PopulateDataGridView()
    Try
        Dim dt As New DataTable
        Dim query As String = String.Empty

        ' 根据CheckBox状态生成查询语句
        If Not CheckBox1.Checked Then
            query = "select ITM,ITC,QOH,PRS,PRSOBBRT,PRSOBNET,SHI,FILENAME1,FILENAME2,FILENAME3,FILENAME4,FILENAME5,FILENAME6,SUBFOLDERP FROM IFG WHERE QOH > 0 AND GDN = 'A.04.01.002.001'"
        Else
            query = "select ITM,ITC,QOH,PRS,PRSOBBRT,PRSOBNET,SHI,FILENAME1,FILENAME2,FILENAME3,FILENAME4,FILENAME5,FILENAME6,SUBFOLDERP FROM IFG WHERE QOH < 0 AND GDN = 'A.04.01.002.001'"
        End If

        ' 执行数据填充(确保cn是已正确初始化的OleDbConnection对象)
        Using adapter As New OleDbDataAdapter(query, cn)
            adapter.Fill(dt)
        End Using

        ' 绑定数据源并刷新控件
        Me.GridControl1.DataSource = dt
        Me.GridControl1.Refresh()

        ' 统一设置列可见性
        GridView1.Columns("SUBFOLDERP").Visible = False
        GridView1.Columns("FILENAME1").Visible = False
        GridView1.Columns("FILENAME2").Visible = False
        GridView1.Columns("FILENAME3").Visible = False
        GridView1.Columns("FILENAME4").Visible = False
        GridView1.Columns("FILENAME5").Visible = False
        GridView1.Columns("FILENAME6").Visible = False

    Catch myerror As OleDbException
        MessageBox.Show("数据库错误: " & myerror.Message)
    Catch ex As Exception
        ' 捕获其他非数据库类型异常
        MessageBox.Show("操作错误: " & ex.Message)
    End Try
End Sub

额外优化建议

  • 参数化查询:如果后续GDN需要动态传入,务必使用参数化查询避免SQL注入,示例:
    query = "select ... FROM IFG WHERE QOH > 0 AND GDN = ?"
    Using adapter As New OleDbDataAdapter(query, cn)
        adapter.SelectCommand.Parameters.AddWithValue("@GDN", "A.04.01.002.001")
        adapter.Fill(dt)
    End Using
    
  • 连接对象规范管理:建议在Using块中创建连接对象,避免连接泄漏:
    Using cn As New OleDbConnection("你的数据库连接字符串")
        Using adapter As New OleDbDataAdapter(query, cn)
            adapter.Fill(dt)
        End Using
    End Using
    
  • 空数据提示:当查询无结果时,给GridView添加空数据提示,提升用户体验:
    If dt.Rows.Count = 0 Then
        GridView1.EmptyText = "未查询到符合条件的数据"
    Else
        GridView1.EmptyText = String.Empty
    End If
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:55:33