You need to enable JavaScript to run this app. C#中如何按ComboBox选项筛选DataGridView控件中的数据并解决报错
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何按ComboBox选项筛选DataGridView控件中的数据并解决报错

报错原因与解决方案

你遇到的Invalid Column 'drink'错误属于SQL语法问题:ProdCat是字符串类型的字段,你拼接SQL语句时没有给匹配值加单引号,导致SQL引擎把drink识别为列名而非要匹配的字符串值,最终抛出列不存在的异常。
另外直接拼接SQL字符串存在严重的SQL注入风险,推荐改用参数化查询,改后代码如下:

private void populateCat()
{
    // 提前判断是否有选中值,避免空引用异常
    if (CatCb2.SelectedValue == null) return;
    try
    {
        // 用using块自动管理连接生命周期,无需手动调用Close释放资源
        using (SqlConnection Con = new SqlConnection("你的数据库连接字符串"))
        {
            Con.Open();
            string CatValue = CatCb2.SelectedValue.ToString();
            // SQL语句使用参数占位符
            string query = "select * from ProductTbl where ProdCat = @CatValue";
            SqlDataAdapter sda = new SqlDataAdapter(query, Con);
            // 给参数赋值,自动处理类型转义、引号包裹问题
            sda.SelectCommand.Parameters.AddWithValue("@CatValue", CatValue);
            SqlCommandBuilder builder = new SqlCommandBuilder(sda);
            var ds = new DataSet();
            sda.Fill(ds);
            ProdDGV.DataSource = ds.Tables[0];
        }
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

代码放置位置

这个筛选方法需要在两个场景下调用:

  • 窗体的Load事件中:确保窗体初始化、ComboBox绑定完默认值之后,首次加载就显示对应筛选结果
  • ComboBox的SelectedIndexChanged事件中:用户每次切换ComboBox选中项时自动触发筛选,同步更新DataGridView展示内容

额外优化建议

  • 不建议全局共用一个数据库连接,每次查询新建连接即可,ADO.NET自带连接池机制,不会产生额外性能损耗,还能避免连接泄漏问题
  • 可以提前给ComboBox设置默认选中项,避免窗体加载时SelectedValue为空导致首次筛选不生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 10:09:03