我所拥有的基本概念是有两个数据网格。其中一个填充了我想要的材料类型和数量作为基线。此表具有独特的材料类型。第二个表可能有多个具有不同数量的相同类型材料的条目。
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.
答案 0 :(得分:1)
您似乎正在覆盖自己的数据源。在代码的开头,您将DataTable dt
声明为新表,并将其设置为存储刷新的数据。从currentOnHandGrid
中提取第一种材料类型的相应数据并将其存储在表格dt
中后,使用currentOnHandGrid
覆盖dt
。现在,您有一张桌子,其中填写了您的第一个材料而没有包含其他材料。当您转到外部循环中的下一个材质时,内部循环会尝试在表格中查找该材质,但它不存在,因为您已用新的材质覆盖原始表格。
只需将用新表覆盖旧表的部分移动到循环外部,它就应该正确写入。
编辑:此外,正如另一位回答者所说,您不需要Continue
声明。另外,使用if语句来检查条件,使用另一个if语句来检查补码是不好的形式。第二个if语句实际上应该是else语句,因为它是一个布尔语句。 “如果就是这样,那么就这样做,或者 else 这样做。”你甚至不需要带有continue
的else语句。如果第一个if语句失败,程序应该继续。