对于 C# 中每个语句中的 for 语句

本文关键字:语句 for 对于 | 更新日期: 2023-09-27 18:36:48

怎么了?基本上想提取表"服务"中每行中的每个代码如果它等于特定文本,则使用匹配文本设置每个相应的行。

foreach (DataRow code in dsAuthors.Tables["Service"].Rows)
{
   for (int i = 0; i < dsAuthors.Tables[1].Rows.Count; i++)
    {
        if (code[1].ToString() == "01")
        {
            Shipment.Rows[i][0] = "Service 1";
        }
        else if (code[1].ToString() == "02")
        {
            Shipment.Rows[i][0] = "Service 2";
        }
        else if (code[1].ToString() == "03")
        {
            Shipment.Rows[i][0] = "Service 3";
        }
    }
}

它只是用服务 1 填充所有行,但我不希望它这样做。

抱歉,并不意味着两个表相同,我相信我已经更新了代码以使其更准确。

对于 C# 中每个语句中的 for 语句

你在同一件事上循环两次,然后将一个值戳到无限的货件行中。它看起来不是很安全,并且鉴于您正在通过foreach内的整个集合循环和设置货件行,这意味着最后一个值将决定所有货件行的内容。

在调试器中查看它,您将看到当您点击服务 2 值时,所有货件行都将在循环中设置为 2,依此类推。

您正在迭代行列表两次。您正在从外部循环中从变量读取数据,并从内部循环写入索引。它将"Service 1"写入所有行,因为最后一行是"01",内部循环将其写入所有行。

试试这个:

var Service = dsAuthors.Tables["Service"];
for (int i = 0; i < Service.Rows.Count; i++)
{
    if (Service.Rows[i][1].ToString() == "01")
    {
        Shipment.Rows[i][0] = "Service 1";
    }
    else if (Service.Rows[i][1].ToString() == "02")
    {
        Shipment.Rows[i][0] = "Service 2";
    }
}