2012-08-05 54 views
0

我擁有的基本概念是有兩個數據網格。其中一個填充我想要的材料類型和數量作爲基線。該表具有獨特的材料類型。第二個表格可能有多個具有不同數量的相同類型材料的條目。使用來自另一個數據的數據合併數據

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. 
+1

我對C#不太熟悉,所以我可能會讀到這個錯誤,但是您是否從Table2讀取了現有的數額,然後重新寫入Table2?在我看來,你正在覆蓋你自己的數據源,而不是寫入一個獨立的源。 – 2012-08-05 18:09:22

+0

哇。這讓我抓住了我的錯誤。第二張表的'刷新'在循環中。把它移到循環外面,就在那裏。 – marcmiller2007 2012-08-05 18:12:33

+1

哎呦,我回答之前我看到你回覆了我的評論。哦,我在那裏提供了更詳盡的解釋。 – 2012-08-05 18:17:16

回答

1

看來將要覆蓋自己的數據源。在代碼的開始處,您將DataTable dt聲明爲新表,並將其設置爲存儲刷新的數據。在從currentOnHandGrid中爲第一種材料類型提取適當的數據並將其存儲在表dt中後,您將用dt覆蓋currentOnHandGrid。現在,您有一張桌子,其中包含您的第一個材料,不包含其他材料。當您轉到外部循環中的下一個材質時,內部循環會嘗試在表格中查找該材料,但不在那裏,因爲您已用新的表格覆蓋原始表格。

只需將覆蓋舊錶格的部分移動到循環的外部,並將其正確寫入。

編輯:此外,正如其他回答者指出的,你不需要Continue聲明。另外,有一個if語句來檢查一個條件和另一個if語句來檢查補語是不好的形式。第二個if語句實際上應該是一個else語句,因爲它是一個布爾語句。 「如果是就是這樣,那麼這樣做,或者其他這樣做。」你甚至不需要其中的continue else語句。如果第一個if語句失敗,程序應該繼續。

+0

感謝您的回答!簡單的錯誤,開始讓我瘋狂。 – marcmiller2007 2012-08-05 19:40:35

+0

所有的時間都會發生在我身上。不止一次,我實際上已經設置了一些返回null的方法,以便程序能夠運行,並且我可以測試其他功能,只有稍後才能忘記,並且奇怪我的程序正在返回奇數值。 – 2012-08-05 19:50:12

相關問題