0

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

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.
4

1 回答 1

1

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

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

编辑:另外,正如其他回答者指出的那样,您不需要该Continue声明。此外,有一个 if 语句来检查条件和另一个 if 语句来检查补语是不好的形式。第二个 if 语句实际上应该是一个 else 语句,因为它是一个布尔语句。“如果是这个,那就做这个,否则就做那个。” 您甚至也不需要带有continue内部的 else 语句。如果第一个 if 语句失败,程序无论如何都应该继续。

于 2012-08-05T18:16:39.460 回答