2016-08-23 72 views
0

我需要填寫已包含所有項目列表的DataGridView。這基於包含在DataSet中的材料的移動記錄。 DataGridView已包含所有項目,例如:A,B,C,D等。程序將根據DataSet中包含的庫存移動來檢查每個項目的當前餘額。如何基於DataGridView中包含的數據從DataSet中將值插入到DataGridView中?

我想在另一個裏面做一個foreach。 DataGridView一行一行地查找項目的名稱,另一個內部的foreach在數據集中搜索記錄股票移動的地方。

我這樣做了,但它只填充了Balance列的第一行。

void FillDataGrid() 
{ 
    var result = 0; 
    string strRowMaterial = string.Empty; 

    Conection ca = new Conection(); 
    string sql = ""; 
    sql += " Select "; 
    sql += " idRegMovement, CatMovement, NameMovement, codMaterial, AmountMovemented "; 
    sql += " From RegMovement "; 
    sql += " ORDER BY idRegMovement "; 

    ca.Connect(); 
    OleDbDataAdapter da = new OleDbDataAdapter(sql, ca.cx); 
    DataSet ds = new DataSet(); 
    da.Fill(ds, "RegMovements"); 
    if (ds.Tables["RegMovements"].Rows.Count == 0) 
    { 
     ca.Disconnect(); 
    } 
    else 
    { 

     foreach (DataGridViewRow dr in datagridview.Rows) 
     { 
      strRowMaterial = Convert.ToString(dr.Cells["codMaterial"].Value); 

      foreach (DataRow row in ds.Tables["RegMovements"].Rows) 
      { 
       if (string.Compare(row["codMaterial"].ToString(), strRowMaterial, StringComparison.InvariantCultureIgnoreCase) == 0) 
       { 
        var Amount = Convert.ToInt32(row["AmountMovemented"]); 

        if (string.Compare(row["CatMovement"].ToString(), "Input", StringComparison.InvariantCultureIgnoreCase) == 0) 
         result += Amount; 

        else 
         result -= Amount; 
       } 
       else 
       { 
        result = 0; 
       }       

      } 
      datagridview.CurrentRow.Cells["Balance"].Value = result; 
     } 
    } 
    ca.Disconnect(); 
} 

問候!

回答

0

當增加值只使用1列CurrentRow

datagridview.CurrentRow.Cells["Balance"].Value = result; 

,如果你的foreach通過:

foreach (DataGridViewRow dr in datagridview.Rows) 

,你也應該使用變量:

dr.Cells["Balance"].Value = result; 
+0

非常感謝,@蒙!這樣可行! – Leandro

+0

不客氣。 –

相關問題