C# Winform 循环查询拆分后产品ID绑定DataGridView仅显示最后一条求助
问题原因
每次遍历产品ID时,你都会将dgvProduct.DataSource重新赋值为当前单次查询返回的单条产品结果,前一次的绑定数据会被直接覆盖,因此最终只能展示最后一次查询到的产品信息。
修复方案
推荐优先使用单次批量查询的写法,仅需访问一次数据库,性能更高:
// 拆分产品ID并转换为int类型列表,Trim处理避免ID前后带空格导致转换失败 List<int> productIdList = products.Split(',') .Select(idStr => Convert.ToInt32(idStr.Trim())) .ToList(); // 一次性查询所有匹配ID的产品名称 var productList = (from u in db.Product where productIdList.Contains(u.ProductId) select new { Productname = u.ProductNamn }).ToList(); // 所有数据查询完成后一次性绑定到DataGridView dgvProduct.DataSource = productList;
如果你的业务逻辑必须逐ID查询处理,可以使用列表先累积所有查询结果,最后再统一绑定:
string[] productArr = products.Split(','); // 定义列表存储所有查询到的产品信息 var allProductList = new List<object>(); foreach (var item in productArr) { int pid = Convert.ToInt32(item.Trim()); var product = (from u in db.Product where u.ProductId == pid select new { Productname = u.ProductNamn }).FirstOrDefault(); // 排除不存在的ID对应的空结果 if (product != null) { allProductList.Add(product); } } // 统一绑定数据源 dgvProduct.DataSource = allProductList;
内容的提问来源于stack exchange,提问作者Helen Tekie
相关产品推荐
相关产品推荐

