2012-06-10 39 views
0

有什麼不對? 基本上要提取表「服務」 的每一行中的每個代碼,如果它等於特定的文本然後設置每個對應列相匹配的文本。的內部聲明中的每個在C#

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

對不起並不意味着有兩個表是相同的我已經更新了代碼,以便更準確的我相信。

回答

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"; 
    } 
} 
+1

不錯,但我會用'foreach'。 –

+0

是啊,但輸出需要被寫入'Shipment',不回'Service',所以我們要麼需要的指數,或將需要通過兩個枚舉在同一時間移動,這是比較複雜的。 –

+0

啊,我看到了...... –

3

你循環同樣的事情兩次,然後戳一個值,裝運行無界。它看起來並不十分安全,並且假設您在整個集合中循環並設置貨件行,這意味着最後一個值將確定所有貨件行的內容。

檢查它在調試器中,你會看到,當你打一個服務值爲2,所有的貨行會在環路等

+0

這正是我試圖避免的。每個單行應該是一個不同的值,因爲「代碼」的每次迭代都會有所不同。 –

+1

如果你能給我你想達到那麼我或許可以解決這個問題是什麼的英文說明書,但我不太清楚你想要做什麼。內部循環以一種不安全的方式將所有數據全部打亂。 –