我有2个DataGridViews: productsDataGridView 和 promotionsDataGridView 。
第一个 productsDataGridView ,使用此方法从文件读取所有值:
public static List<Products> LoadUserListFromFile(string filePath)
{
var loadProductsData = new List<Products>();
foreach (var line in File.ReadAllLines(filePath))
{
var columns = line.Split('\t');
loadProductsData.Add(new Products
{
InventoryID = "BG" + columns[0],
Brand = columns[1],
Category = columns[2],
Description = columns[3],
Promotions = Convert.ToInt32(columns[4]),
Quantity = Convert.ToInt32(columns[5]),
Price = Convert.ToDouble(columns[6])
});
}
return loadProductsData;
}
使用所有值正确填充第一个DataGridView( productsDataGridView )。现在在我的 productsDataGridView 中,我已经设置了一个名为“Promotion”的复选框列(列提升从文件中读取整数值):如果它的值为0 - 如果选中大于1:则不选中该框。 现在我想做的是过滤/移动(我不关心两者中的哪一个)从 productsDataGridView 到 promotionsDataGridView 的值我们在复选框列(促销)中有一个&gt; 0值。
示例: 如果productsDataGridView有25个总产品,其中8个是促销产品(在复选框列中值> 0),promotionDataGridView应该填充8个值,这些值从DataGridView复制/移动/过滤/等等。
到目前为止,我只能使用以下代码将数据从第一个DataGridView复制到第二个:
public void Experimental2()
{
dataGridView1.DataSource = Products.LoadUserListFromFile(filePath);
//Bind datagridview to linq
var dg1 =
(from a in productsDataGridView.Rows.Cast<DataGridViewRow>()
select new { Column1 = a.Cells["Column1"].Value.ToString() }).ToList();
//loop dg1 and save it to datagridview2
foreach (var b in dg1)
{
dataGridView1.Rows.Add(b.Column1);
}
}
我做了一些可怜的尝试来插入IF检查,这将为我完成工作(仅复制IF columnt [4]&gt; 0)但我是DataGridView的新手所以我只是写不出任何会甚至可以编译...
请帮帮我!
答案 0 :(得分:1)
如果两个网格都有相同的模式(我假设它们有),那么我们将找到检查哪些行,将产品绑定到给定行,创建新结果列表并将其绑定到下一个网格。
var results = new List<Products>(); //our new data source with only checked items
foreach (DataGridViewRow row in productsDataGridView.Rows)
{
var item = row.DataBoundItem as Products; //get product from row (only when grid is databound!)
if (item.Promotions > 0)
{
results.Add(item);
}
}
promotionsDataGridView.DataSource = results;
如果要删除已检查的第一个网格中的行,则创建临时行列表,向其添加已检查的行,最后迭代它们并逐个删除。希望能帮到你:))