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

同じことを2回ループしてから、無制限の出荷行に値を突っ込んでいます。あまり安全ではないように見えます。foreach内のコレクション全体で出荷行をループして設定している場合、最後の値がすべての出荷行の内容を決定することを意味します。

デバッガーで確認してください。サービス2の値に達すると、ループなどですべての出荷行が2に設定されることがわかります。

于 2012-06-10T23:06:51.657 に答える
2

行のリストを2回繰り返しています。外側のループから変数からデータを読み取り、内側のループからインデックスに書き込みます。最後の行が「01」であるため、すべての行に「サービス1」を書き込んでおり、内部ループはそれをすべての行に書き込みます。

代わりにこれを試してください:

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 に答える