C# 如何筛选/选择性地将值从一个DataGridView复制到另一个DataGridView

C# 如何筛选/选择性地将值从一个DataGridView复制到另一个DataGridView,c#,datagridview,filter,C#,Datagridview,Filter,我有两个数据网格视图:productsDataGridView和promotionsDataGridView 第一个是productsDataGridView,它使用以下方法从文件中读取所有值: public static List<Products> LoadUserListFromFile(string filePath) { var loadProductsData = new List<Products>(); foreach (var line

我有两个数据网格视图:productsDataGridViewpromotionsDataGridView

第一个是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;
}
公共静态列表LoadUserListFromFile(字符串文件路径)
{
var loadProductsData=新列表();
foreach(File.ReadAllLines(filePath)中的var行)
{
var columns=line.Split('\t');
loadProductsData.Add(新产品
{
InventoryID=“BG”+列[0],
品牌=列[1],
类别=列[2],
Description=列[3],
升级=转换为.ToInt32(第[4]列),
数量=转换为32(列[5]),
Price=Convert.ToDouble(列[6])
});
}
返回装载产品数据;
}
第一个DataGridView(productsDataGridView)正确填充了所有值。现在,在我的productsDataGridView中,我设置了一个名为“升级”的复选框列(列升级从文件中读取整数值):如果它的值为0,则不选中该框,如果大于1,则选中。 现在我想做的是过滤/移动(我不在乎两者中的哪一个)从productsDataGridViewpromotionsDataGridView的值,我们在复选框列(促销)中有一个>0的值

示例: 如果productsDataGridView总共有25个产品,其中8个是促销产品(复选框列中的值大于0),则促销sDataGridView应填充8个值,这些值是从DataGridView复制/移动/过滤/任意值

到目前为止,我只能使用以下代码将数据从第一个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);
    }
}
public-void-Experimental2()
{
dataGridView1.DataSource=Products.LoadUserListFromFile(文件路径);
//将datagridview绑定到linq
var dg1=
(从productsDataGridView.Rows.Cast()中的
选择新的{Column1=a.Cells[“Column1”].Value.ToString()}.ToList();
//循环dg1并将其保存到datagridview2
foreach(dg1中的变量b)
{
dataGridView1.Rows.Add(b.Column1);
}
}
我做了一些可怜的尝试来插入一个IF检查,这对我来说可以完成这项工作(仅当columnt[4]>0时才复制),但我对DataGridView真的很陌生,所以我根本无法编写任何可以编译的东西


请帮帮我

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

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; 
var results=newlist()//我们的新数据源仅包含选中项
foreach(productsDataGridView.Rows中的DataGridViewRow行)
{
var item=row.DataBoundItem as Products;//从行获取产品(仅当网格是数据绑定时!)
如果(item.Promotions>0)
{
结果:增加(项目);
}
}
promotionsDataGridView.DataSource=结果;

如果要从第一个网格中删除选中的行,请创建临时行列表,将选中的行添加到该列表中,并在结束时对其进行迭代并逐个删除。希望对您有所帮助:)

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

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; 
var results=newlist()//我们的新数据源仅包含选中项
foreach(productsDataGridView.Rows中的DataGridViewRow行)
{
var item=row.DataBoundItem as Products;//从行获取产品(仅当网格是数据绑定时!)
如果(item.Promotions>0)
{
结果:增加(项目);
}
}
promotionsDataGridView.DataSource=结果;

如果要从第一个网格中删除选中的行,请创建临时行列表,将选中的行添加到该列表中,并在结束时对其进行迭代并逐个删除。希望对您有所帮助:)

您是否尝试过探索事件?有许多事件可以利用,也可以使用。您是否尝试过探索这些事件?有许多事件可以利用,也可以通过以下方式使用:两个DGV并不完全相同。我只从第一列中选择了5列。编辑后,出现了错误,忘记添加
。行
:)。此外,网格不必相同,只是它们的列应该具有相同的数据绑定集。我没有测试它,但我使用了您提供的所有信息(以及一些假设:)。不过,它应该可以正常工作。更改了一些代码,请尝试一下。是的,它很有效,哈哈,想象一下我有多愚蠢。。。我没有在表单_LOAD!中加载该方法:我会很爱你的!顺便说一下:这两个DGV并不完全相同。我只从第一列中选择了5列。编辑后,出现了错误,忘记添加
。行
:)。此外,网格不必相同,只是它们的列应该具有相同的数据绑定集。我没有测试它,但我使用了您提供的所有信息(以及一些假设:)。不过,它应该可以正常工作。更改了一些代码,请尝试一下。是的,它很有效,哈哈,想象一下我有多愚蠢。。。我没有在表单_LOAD!中加载该方法:我会很爱你的!