比较两个datagridviews

时间:2012-10-02 09:38:02

标签: c# winforms datagridview

我在一个表单中有两个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。

3 个答案:

答案 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上的最后一次迭代。