如何过滤/有选择地将值从一个DataGridView复制到另一个DataGridView

我有2个DataGridViews: productsDataGridViewpromotionsDataGridView

第一个, productsDataGridView ,它使用此方法从文件中读取所有值:

public static List LoadUserListFromFile(string filePath) { var loadProductsData = new List(); 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” 的复选框列(Promotion列从文件中读取整数值):如果它的值为0 – 则不选中该框,如果大于1:则选中。 现在我想做的是FILTER / MOVE (我不关心两者中的哪一个)从productsDataGridViewpromotionsDataGridView的值,我们在复选框列(促销)中有一个> 0的值。

在此处输入图像描述

示例:如果productsDataGridView共有25个产品,其中8个是促销产品(在复选框列中值> 0),promotionDataGridView应填充8个值,这些值将从DataGridView中复制/移动/过滤/任何内容。

到目前为止,我只能使用以下代码将数据从第一个DataGridView复制到第二个DataGridView:

 public void Experimental2() { dataGridView1.DataSource = Products.LoadUserListFromFile(filePath); //Bind datagridview to linq var dg1 = (from a in productsDataGridView.Rows.Cast() 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]> 0)但我真的是DataGridView的新手,所以我只是写不出任何甚至可以编译的东西…

请帮我!

如果两个网格都有相同的模式(我假设它们有),那么我们将找到检查哪些行,将产品绑定到给定行,创建新结果列表并将其绑定到下一个网格。

 var results = new List(); //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; 

如果要删除已检查的第一个网格中的行,则创建临时行列表,向其添加已检查的行,最后迭代它们并逐个删除。 希望能帮到你:)