原因碼不起作用是網格設置爲只讀,因此在事件處理程序(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];
}
當編輯模式停止當前選定的單元格時發生CellEndEdit事件。您是否嘗試過編輯網格中每一行的單元格? – foobar
謝謝!,我只讓網格讀取。所以這是不可能的。其實這是一個存摺顯示網格,所以單元格值不能被編輯或修改。只有問題是平衡列沒有顯示正確的結果。我不明白爲什麼? 。 –
你從哪裏獲取網格數據?它來自數據庫還是您手動填充每個單元格? – foobar