使用另一个数据在一个数据表中组合数据

时间:2012-08-05 18:01:53

标签: c# loops datagridview

我所拥有的基本概念是有两个数据网格。其中一个填充了我想要的材料类型和数量作为基线。此表具有独特的材料类型。第二个表可能有多个具有不同数量的相同类型材料的条目。

Table 1                  Table 2    
F01 20/40  150           F01 20/40     40
F01 30/50  150           F01 20/40     50
F01 50/90  150           F01 20/40     100
F01 70/110 150           F01 30/50     60

由于表1中的每种材料类型都是唯一的,因此我将获取每一行(单元格索引[0])并循环遍历第二列中的每一行,并将每种匹配材料类型的数量相加。

我被困了,因为我已经有一段时间了,为什么我的循环在成功计算出第一种材料类型后仍然会破坏。这是我的代码:

private void combineButton_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        DataRow dtrow;
        dt.Columns.Add("Material");
        dt.Columns.Add("OnHand_Qty");
        int x = 0;
        foreach (DataGridViewRow row in baseStockGrid.Rows)
        {
            string material = row.Cells[0].Value.ToString();
            foreach (DataGridViewRow crow in currentOnHandGrid.Rows)
            {
                string check = crow.Cells[0].Value.ToString();
                if (check == material)
                {
                    var y = crow.Cells[1].Value.ToString();
                    x = int.Parse(y) + x;
                }
                if (check != material)
                {
                    continue;
                }
            }
            dtrow = dt.NewRow();
            dtrow[0] = material.ToString();
            dtrow[1] = x;
            dt.Rows.Add(dtrow);
            x = 0;
            currentOnHandGrid.DataSource = dt;
        }
    }  

我基本上刷新数据网格以显示组合材料计数,它显示如下:

Table1                 Table2
F01 20/40   150        F01 20/40   190
F01 30/50   150        F01 30/50   0  //<---- Should show 60 according to example above.

1 个答案:

答案 0 :(得分:1)

您似乎正在覆盖自己的数据源。在代码的开头,您将DataTable dt声明为新表,并将其设置为存储刷新的数据。从currentOnHandGrid中提取第一种材料类型的相应数据并将其存储在表格dt中后,使用currentOnHandGrid覆盖dt。现在,您有一张桌子,其中填写了您的第一个材料而没有包含其他材料。当您转到外部循环中的下一个材质时,内部循环会尝试在表格中查找该材质,但它不存在,因为您已用新的材质覆盖原始表格。

只需将用新表覆盖旧表的部分移动到循环外部,它就应该正确写入。

编辑:此外,正如另一位回答者所说,您不需要Continue声明。另外,使用if语句来检查条件,使用另一个if语句来检查补码是不好的形式。第二个if语句实际上应该是else语句,因为它是一个布尔语句。 “如果就是这样,那么就这样做,或者 else 这样做。”你甚至不需要带有continue的else语句。如果第一个if语句失败,程序应该继续。