2017-03-07 18 views
0

我使用Data Grid來顯示存摺餘額。我已經完成了所有無法在相應列中獲得餘額的所有內容。使用c在網格中獲取passbok查看總數

private void dgview2_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     int credit1, debit1; 
     int balance = new int(); 

     if (int.TryParse(dgview2.Rows[e.RowIndex].Cells["debit"].Value.ToString(), 
      out debit1) && int.TryParse(dgview2.Rows[e.RowIndex].Cells["credit"].Value.ToString(), 
      out credit1) && int.TryParse(dgview2.Rows[e.RowIndex].Cells["balance"].Value.ToString(), 
      out balance)) 
     { 
       balance = balance + credit1 - debit1; 
      dgview2.Rows[e.RowIndex].Cells["balance"].Value = balance.ToString(); 
     } 

    } 

Vfp9sp2 Application output

+0

當編輯模式停止當前選定的單元格時發生CellEndEdit事件。您是否嘗試過編輯網格中每一行的單元格? – foobar

+0

謝謝!,我只讓網格讀取。所以這是不可能的。其實這是一個存摺顯示網格,所以單元格值不能被編輯或修改。只有問題是平衡列沒有顯示正確的結果。我不明白爲什麼? 。 –

+0

你從哪裏獲取網格數據?它來自數據庫還是您手動填充每個單元格? – foobar

回答

0

原因碼不起作用是網格設置爲只讀,因此在事件處理程序(dgview2_CellEndEdit)指定的代碼不會被觸發。

理想情況下,你應該在更新網格之前作出平衡計算,但作爲一個快速的解決方法,你可以將代碼移植到這樣的私有方法:

private void UpdateBalance() 
{ 
    for (int i = 0; i < dgview2.Rows.Count; i++) 
    { 
     int credit1, debit1, balance; 

     if (int.TryParse(dgview2.Rows[i].Cells[3].Value.ToString(), 
       out debit1) && int.TryParse(dgview2.Rows[i].Cells[4].Value.ToString(), 
       out credit1) && int.TryParse(dgview2.Rows[i].Cells[5].Value.ToString(), 
       out balance)) 
     { 
      balance = balance + credit1 - debit1; 
      dgview2.Rows[i].Cells[5].Value = balance.ToString(); 
     } 

    } 
} 

然後調用這個方法,你完成填充網格後:

UpdateBalance(); 

該方法迭代每一行並使用相同的邏輯更新平衡單元。

[編輯用於更新代碼]

而不是上面,你可以在你更新邏輯如下進行計算:

while (dr.Read()) 
{ 
    var n = dgview2.Rows.Add(); 
    dgview2.Rows[n].Cells[0].Value = Convert.ToDateTime(dr["tdate"].ToString()); 
    dgview2.Rows[n].Cells[1].Value = dr["particular"].ToString(); 
    dgview2.Rows[n].Cells[2].Value = dr["trmode"].ToString(); 
    dgview2.Rows[n].Cells[3].Value = dr["debit"].ToString(); 
    dgview2.Rows[n].Cells[4].Value = dr["credit"].ToString(); 
    dgview2.Rows[n].Cells[5].Value = dr["balance"].ToString();  

    int credit1, debit1, balance; 

    if (int.TryParse(dr["debit"].ToString(), 
     out debit1) && int.TryParse(dr["credit"].ToString(), 
     out credit1) && int.TryParse(dr["balance"].ToString(), 
     out balance)) 
    { 
     dgview2.Rows[n].Cells[5].Value = balance + credit1 - debit1; 
    } 

    dgview2.FirstDisplayedScrollingRowIndex = n; 
    dgview2.CurrentCell = dgview2.Rows[n].Cells[0]; 
} 
+0

錯誤「列名爲借記無法找到\ r \ n參數名:列名」}「 –

+0

這裏是我使用的填充數據網格 –

+0

更新與指標,而不是行名的答案代碼 – foobar

0

這裏是我正在期運用來填充電網

代碼
private void fill_div() 
    { 
     var com = new MySqlCommand("Select *From shtrn where mem_no ='" + textBox1.Text + "' order by tdate ", con_db.con); 
     var dr = com.ExecuteReader(); 
     try 
     { 
      dgview2.Rows.Clear(); 
      while (dr.Read()) 
      { 
       var n = dgview2.Rows.Add(); 
       dgview2.Rows[n].Cells[0].Value = Convert.ToDateTime(dr["tdate"].ToString()); 
       dgview2.Rows[n].Cells[1].Value = dr["particular"].ToString(); 
       dgview2.Rows[n].Cells[2].Value = dr["trmode"].ToString(); 
       dgview2.Rows[n].Cells[3].Value = dr["debit"].ToString(); 
       dgview2.Rows[n].Cells[4].Value = dr["credit"].ToString(); 
       dgview2.Rows[n].Cells[5].Value = dr["balance"].ToString(); 
       dgview2.FirstDisplayedScrollingRowIndex = n; 
       dgview2.CurrentCell = dgview2.Rows[n].Cells[0]; 
       UpdateBalance(); 
      } 
      { 

       dr.Close(); 
      } 

     } 
     catch (FormatException) 
     { 
      MessageBox.Show("No Records Found "); 
     } 
    } 
+0

錯誤」命名的餘額列不能\ r \ n參數名稱:columnName「}」 –

+0

我現在更新了兩種方法的答案 – foobar

+0

您正在循環內調用UpdateBalance()多次。它應該在循環之後調用。 – foobar