0

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

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 填充所有行,但我不希望它这样做。

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

4

2 回答 2

3

您在同一件事上循环了两次,然后将一个值无限地插入到货件行中。它看起来不太安全,并且考虑到您在 foreach 内的整个集合中循环和设置货件行,这意味着最后一个值将确定所有货件行的内容。

在调试器中检查它,您会看到当您点击 Service 2 值时,所有发货行都将在循环中设置为 2 等等。

于 2012-06-10T23:06:51.657 回答
2

您正在对行列表进行两次迭代。您正在从外部循环的变量中读取数据,并从内部循环写入索引。它将“服务 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";
    }
}
于 2012-06-10T23:10:14.747 回答