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

如何基于绑定数据的ComboBox查询指定行,将Process列内容填充至ListBox?

解决ListBox显示所有Process行的问题

嘿,我一眼就看出问题所在啦!咱们一步步来梳理:

问题根源

  1. SQL查询条件搞反了:你现在的查询是用Process = @Process来过滤,但实际需求是根据ComboBox选中的「产品名称(multi ice cream)」找到对应的行,所以应该用[Product Family] = @ProductName作为过滤条件才对。
  2. ListBox填充逻辑错误:你现在是对Listbox1.Text做拆分,但这个时候ListBox里还没内容,完全是空的!正确的做法是从查询到的DataTable行里取出Process列的值,再拆分添加。

修正后的代码

// 用using包裹连接和适配器,自动释放资源,避免连接泄露
using (MAcon)
{
    MAcon.Open();
    // 修正查询条件:根据Product Family匹配选中项,只查询Process列更高效
    OleDbDataAdapter da = new OleDbDataAdapter("Select Process from [Product Family] Where [Product Family] = @ProductName", MAcon);
    da.SelectCommand.Parameters.AddWithValue("@ProductName", ItemCBx.Text);
    DataTable dtbl = new DataTable();
    da.Fill(dtbl);

    if (dtbl.Rows.Count == 1)
    {
        // 清空ListBox原有内容,避免重复添加
        Listbox1.Items.Clear();
        // 从查询到的行中获取Process值,拆分后添加
        string processValue = dtbl.Rows[0]["Process"].ToString();
        processValue.Split(',').ToList().ForEach(c => Listbox1.Items.Add(c.Trim()));
        Define.SelectedIndex = 1;
    }
}
// 不用手动Close,using会自动处理

额外优化建议

  • 尽量只查询需要的列(比如这里只查Process),比Select *更高效,也避免不必要的数据加载。
  • 用using语句包裹数据库连接、适配器等实现IDisposable的对象,能自动释放资源,防止连接池耗尽。
  • 可以加个判断,如果dtbl.Rows.Count为0,给个提示(比如“未找到对应产品”),提升用户体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:13:02