循环 arraylist 并在 datagridView 中显示,C# Winform
Looping arraylist and display in datagridView , C# Winform
我有一些 productID
作为 字符串 用逗号让变量 products
说 "10,11,12"
我把它们分开
string[] productlist = products.Split(',');
但是当我想在 datagridview 中显示这些产品的名称时,我只得到最后一个。不是所有三个产品。
这是我的代码:
foreach (var item in productlist)
{
int Pid = Convert.ToInt32(item);
var pro = (from u in db.Product
where u.ProductId == Pid
select new
{
Productname = u.ProductNamn
}).Tolist();
dgvProduct.DataSource = pro;
}
我的代码应该是什么样的?我知道我循环的时候有问题,但是我不知道怎么解决。
非常感谢你们的帮助,提前谢谢你们
我的猜测是:
如果 productList 中有三个项目,则 foreach 将 运行 三次,每个项目一个。
当它在 db.Product
中找到 product
时,它会调用
dgvProduct.DataSource = pro;
其中 pro
是与第一项相关的 product
。但是随后找到了第二个项目,并且该行再次被称为
dgvProduct.DataSource = pro;
但现在是第二个 product
。最后检索到第三项(最后一项)并且
dgvProduct.DataSource = pro;
所以最后你覆盖了dgvProduct.DataSource = pro
,当然最后一个是剩下的...
虽然不确定它是否有效,但我会做的是制作一个包含所有产品的集合,然后将该集合设置为 dgvProduct.DataSource
。也许像
var pro = (from u in db.Product
where productlist.Contains(u.ProductId.ToString())
select new
{
Productname = u.ProductNamn
}).Tolist();
dgvProduct.DataSource = pro;
您似乎在每次迭代时都覆盖了 dgvProduct.DataSource
,这意味着最后一次迭代将是唯一有效的迭代。您可能只想在收集所有产品后在循环外设置 dgvProduct.DataSource
。但是,这可以更有效地完成:
// 'Select(int.Parse)' is short for 'Select(strId => int.Parse(strId))'
var prodIds = productlist.Select(int.Parse).ToList();
var products =
(from u in db.Product
where prodIds.Contains(u.ProductId)
select new
{
Productname = u.ProductNamn
}).Tolist();
dgvProduct.DataSource = products;
我有一些 productID
作为 字符串 用逗号让变量 products
说 "10,11,12"
我把它们分开
string[] productlist = products.Split(',');
但是当我想在 datagridview 中显示这些产品的名称时,我只得到最后一个。不是所有三个产品。
这是我的代码:
foreach (var item in productlist)
{
int Pid = Convert.ToInt32(item);
var pro = (from u in db.Product
where u.ProductId == Pid
select new
{
Productname = u.ProductNamn
}).Tolist();
dgvProduct.DataSource = pro;
}
我的代码应该是什么样的?我知道我循环的时候有问题,但是我不知道怎么解决。
非常感谢你们的帮助,提前谢谢你们
我的猜测是:
如果 productList 中有三个项目,则 foreach 将 运行 三次,每个项目一个。
当它在 db.Product
中找到 product
时,它会调用
dgvProduct.DataSource = pro;
其中 pro
是与第一项相关的 product
。但是随后找到了第二个项目,并且该行再次被称为
dgvProduct.DataSource = pro;
但现在是第二个 product
。最后检索到第三项(最后一项)并且
dgvProduct.DataSource = pro;
所以最后你覆盖了dgvProduct.DataSource = pro
,当然最后一个是剩下的...
虽然不确定它是否有效,但我会做的是制作一个包含所有产品的集合,然后将该集合设置为 dgvProduct.DataSource
。也许像
var pro = (from u in db.Product
where productlist.Contains(u.ProductId.ToString())
select new
{
Productname = u.ProductNamn
}).Tolist();
dgvProduct.DataSource = pro;
您似乎在每次迭代时都覆盖了 dgvProduct.DataSource
,这意味着最后一次迭代将是唯一有效的迭代。您可能只想在收集所有产品后在循环外设置 dgvProduct.DataSource
。但是,这可以更有效地完成:
// 'Select(int.Parse)' is short for 'Select(strId => int.Parse(strId))'
var prodIds = productlist.Select(int.Parse).ToList();
var products =
(from u in db.Product
where prodIds.Contains(u.ProductId)
select new
{
Productname = u.ProductNamn
}).Tolist();
dgvProduct.DataSource = products;