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

如何将查询到的商品从数据库加载到DataGridView,现有代码仅能校验商品是否存在

功能实现方案

现有逻辑问题排查

  • 首先确认你的存储过程POSSearchProduct逻辑:如果当前存储过程仅返回商品是否存在的标识,你需要修改存储过程,当输入的商品编码匹配到数据时,返回该商品的全部需要展示的字段(如商品编码、名称、规格、单价等)
  • 冗余调用adapter.SelectCommand.ExecuteNonQuery(),MySqlDataAdapter.Fill已经自动执行查询并填充DataTable,这行属于无效代码
  • 现有逻辑仅实现了搜索结果绑定到查询列表控件,缺少「选中搜索结果的商品后加载到目标DataGridView」的核心逻辑

第一步:修正查询代码

using (MySqlConnection conn = new MySqlConnection(constring))
{
    conn.Open();
    MySqlDataAdapter adapter = new MySqlDataAdapter("POSSearchProduct",conn);
    adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
    // 增加Trim处理避免前后空格导致匹配失败
    adapter.SelectCommand.Parameters.AddWithValue("_SearchProduct", txtSearch.Text.Trim());
    DataTable dtbl = new DataTable();
    adapter.Fill(dtbl);
    // 绑定到搜索结果展示DataGridView
    tblProducts.DataSource = dtbl;
    // 隐藏不需要展示的列
    tblProducts.Columns[0].Visible = false;
    tblProducts.Columns[5].Visible = false;
    tblProducts.Columns[6].Visible = false;
    tblProducts.Columns[7].Visible = false;
    // using语句会自动释放连接,无需手动Close
}

第二步:实现选中商品加载到目标DataGridView逻辑

假设你用来承载选中商品的目标DataGridView控件名为dgvSelectedProducts,需要先为它提前配置好列结构(和你需要展示的商品字段对应,比如商品编码、名称、规格、单价、数量、小计),以下是双击搜索结果行添加选中商品的实现:

// 给搜索结果控件tblProducts注册CellDoubleClick事件
private void tblProducts_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    // 过滤表头点击
    if(e.RowIndex < 0) return;
    
    DataRowView selectedProduct = tblProducts.Rows[e.RowIndex].DataBoundItem as DataRowView;
    if(selectedProduct == null) return;

    // 可选:添加去重逻辑,避免重复添加同一商品
    foreach (DataGridViewRow row in dgvSelectedProducts.Rows)
    {
        if (row.Cells["ProductCode"].Value?.ToString() == selectedProduct["你的商品编码数据库字段名"].ToString())
        {
            // 重复商品直接累加数量,可根据业务需求调整
            int currentQty = Convert.ToInt32(row.Cells["Quantity"].Value);
            row.Cells["Quantity"].Value = currentQty + 1;
            // 同步更新小计
            row.Cells["SubTotal"].Value = currentQty * Convert.ToDecimal(row.Cells["Price"].Value);
            return;
        }
    }

    // 新增行到选中商品列表,注意替换为你实际的数据库字段名
    decimal price = Convert.ToDecimal(selectedProduct["你的单价字段名"]);
    dgvSelectedProducts.Rows.Add(
        selectedProduct["你的商品编码字段名"],
        selectedProduct["你的商品名字段名"],
        selectedProduct["你的规格字段名"],
        price,
        1, // 默认数量为1,可自定义
        price // 初始小计为单价*1
    );
}

可选优化点

  • 给搜索框绑定回车事件,触发查询无需点击按钮
  • 新增复选框列支持批量选中多个搜索结果,一次性添加到选中列表
  • 给选中商品列表增加修改数量、删除单个商品、清空全部的操作按钮

内容的提问来源于stack exchange,提问作者Rameljay Cuña

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:24:05