C# 如何筛选/选择性地将值从一个DataGridView复制到另一个DataGridView
我有两个数据网格视图:productsDataGridView和promotionsDataGridView 第一个是productsDataGridView,它使用以下方法从文件中读取所有值: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
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,则选中。
现在我想做的是过滤/移动(我不在乎两者中的哪一个)从productsDataGridView到promotionsDataGridView的值,我们在复选框列(促销)中有一个>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!中加载该方法:我会很爱你的!