VB.NET中如何用CheckBox实现DataGridView的两种查询数据填充
VB.NET CheckBox控制DataGridView数据填充问题排查与修复
核心问题分析
- 未勾选CheckBox时无数据操作逻辑:当
CheckBox1未勾选时,仅定义了SQL查询语句,但没有执行数据填充、数据源绑定操作,导致DataTable为空,GridView自然无数据。 - 变量作用域与逻辑冗余:
query变量在If/Else代码块内定义,属于局部变量,且Else块内重复判断CheckBox1.Checked=True,完全多余。 - 连接对象使用错误:如果
cn是OleDbConnection对象,cn.ToString返回的是对象的字符串描述,并非有效连接字符串,应直接传入cn对象本身。 - 列可见性设置重复:两种查询场景下的列可见性规则一致,没必要仅在
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
相关产品推荐
相关产品推荐

