【问题标题】:Comparing two datagridviews比较两个数据网格视图
【发布时间】:2019-02-24 23:38:31
【问题描述】:

我在一种形式中有两个数据网格视图。第一个,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。

【问题讨论】:

  • 具体问题是什么?您知道如何访问单元格中包含的值吗?你知道如何比较价值吗?你知道如何设置值吗?
  • 如果两个数据网格视图都指向同一个数据源,那么它应该是同步的。最好从用户的角度描述您的需求。

标签: c# winforms datagridview


【解决方案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
            }
        }

|

【讨论】:

    【解决方案2】:

    假设您使用包含示例中的这 4 个属性的相同对象填充两个数据网格。如果在第二个数据网格中有匹配的对象,则必须根据您的过滤器检查第一个数据网格中的选定行。使用 Linq。如果是这样,则将所选项目中的数据从第一个数据网格复制到秒的匹配元素中。我担心您需要手动完成所有这些步骤,因为没有可以比较两个数据网格的方法,您只需设置一些过滤器即可完成工作。你会有一些工作要做,但这并不难。祝你好运。

    【讨论】:

      【解决方案3】:

      Steve 的答案无法正常工作,无法编译。

      这是我的解决方案:

              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 循环将循环遍历每一行,然后您可以选择一个单元格甚至单元格进行比较。这段代码有点长,我相信它可以简化,但它确实可以完成工作。

      目前,这将检查数据网格 2 中的每一行是否与数据网格 2 中的匹配,仅在单个列上。

      记住数据网格的导入是基于 0 索引的。 datagrid 的 Count 属性给出了基于 [1]index 的计数,因此我们需要减去 datagrid 2 上的最后一次迭代。

      【讨论】:

        猜你喜欢
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-24
        • 2011-07-30
        • 2019-07-21
        相关资源
        最近更新 更多