我在一个表单中有两个datagridviews。第一个,datagridview1
包含列和数据:
name IC EMAIL TELEPHONE
------------------------------------------------------
rOO 898989096677 AB@YAHOO.COM 018-9097878
datagridview2
已
name IC EMAIL TELEPHONE ID
-----------------------------------------------------------
rOO 898989096677 AB@YAHOO.COM 018-9097878 8787
我想请求如何比较两个datagridviews的帮助,如图所示,我想比较一个datagridview和另一个datagridview的四列,看看是否有任何结果匹配。例如,roo
名称是否与另一个datagridview匹配,我希望将id(8787)中的值发送到另一个datagridview。
答案 0 :(得分:1)
有一个非常简单的解决方案来比较两个datagridview并在第三个中显示它们的结果。
for (int i = 0; i < dtView1.Rows.Count; i++)
{
for (int j = 1; j < dtView1.Columns.Count; j++)
{
if ((dtView1.Rows[i][j]) == (dtView2.Rows[i][j]))
{
// here you can add your own logic
}
else
{
// here you can add your own logic
}
}
|
答案 1 :(得分:0)
假设您使用示例中包含这4个属性的相同对象填充两个数据网格。如果在第二个数据网格中存在匹配对象,则必须根据过滤器检查第一个数据网格中的选定行。使用Linq。如果是,则将数据从第一个数据网格中的所选项目复制到秒中的匹配元素中。我担心你需要手动完成所有这些步骤,因为没有方法可以比较两个数据网格,你只需设置一些过滤器就可以完成工作。你将有一些工作要做,但并不难。祝你好运。
答案 2 :(得分:0)
史蒂夫的答案无法正常运行,也无法编译。
这是我的解决方案:
int x = 0;
int y = 0;
int i = -1;
int z = 0;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
i++;
if ((dataGridView1.Rows[i].Cells[i].Value) == (dataGridView2.Rows[z].Cells[i].Value))
{
x++;
}
else
{
y++;
}
if (z < dataGridView2.Rows.Count)
{
z++;
}
if(z == dataGridView2.Rows.Count)
{
z--; //subtract 1 from the total count because the datagrid is 0 index based.
}
MessageBox.Show("Matched: " + x.ToString() + "\r\n" + "Not Matched: " + y.ToString());
数据网格上的foreach循环将遍历每一行,然后您可以选择一个单元格甚至单元格进行比较。这段代码有点冗长,我确信它可以简化,但它可以完成这项工作。
目前,这将检查datagrid 2中的每一行,以查找datagrid 2中的匹配项,仅在单个列上进行。
它的导入记住datagrid是基于0索引的。 datagrid的Count属性给出了基于[1]索引的计数,因此我们需要减去datagrid 2上的最后一次迭代。