C# - 更改 Datagridview 多个单元格的值导致递归循环
C# - Changing Value of Datagridview Multiple Cells Causing Recurive Loop
如果同一行的任何一个单元格值发生变化,我想更新一行的 datagridview 单元格的值。
这是我的代码...
private void DGV_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
try
{
int Qty = Convert.ToInt32(DGV["Qty", rowspan].Value);
decimal Rate = Convert.ToDecimal(DGV["Rate", rowspan].Value);
decimal amount = Convert.ToDecimal(DGV["Amount", rowspan].Value);
decimal Dis1 = Convert.ToDecimal(DGV["Dis1", rowspan].Value);
decimal Dis1_ = Convert.ToDecimal(DGV[9, rowspan].Value);
decimal Dis2 = Convert.ToDecimal(DGV["Dis2", rowspan].Value);
decimal Dis2_ = Convert.ToDecimal(DGV[11, rowspan].Value);
decimal GST = Convert.ToDecimal(DGV["GST", rowspan].Value);
decimal GST_ = Convert.ToDecimal(DGV[13, rowspan].Value);
decimal NetAmt = Convert.ToDecimal(DGV["NetAmt", rowspan].Value);
DGV["Qty", rowspan].Value = Qty;
DGV["Rate", rowspan].Value = Rate;
DGV["Amount", rowspan].Value = Qty * Rate;
DGV["Dis1", rowspan].Value = Convert.ToDecimal(((Dis1_ * NetAmt) / 100).ToString("N1"));
DGV[9, rowspan].Value = Convert.ToDecimal(((Dis1 / NetAmt) * 100).ToString("N1"));
DGV["Dis2", rowspan].Value = Convert.ToDecimal(((Dis2_ * NetAmt) / 100).ToString("N1"));
DGV[11, rowspan].Value = Convert.ToDecimal(((Dis2 / NetAmt) * 100).ToString("N1"));
DGV["GST", rowspan].Value = Convert.ToDecimal(((GST_ * NetAmt) / 100).ToString("N1"));
DGV[13, rowspan].Value = Convert.ToDecimal(((GST_ / NetAmt) * 100).ToString("N1"));
DGV["NetAmt", rowspan].Value = CalculateNetAmount(amount, Dis1, Dis2, GST);
lblAmount.Text = totalamount().ToString();
}
catch (WhosebugException ex)
{
loglbl.Text = ex.Message;
}
}
目前我正在关注 WhosebugExcpetion...
An unhandled exception of type 'System.WhosebugException'
occurred in System.Windows.Forms.dll
有什么建议吗?如何?
我的建议是,您可以在网格中使用额外的按钮 "Update" 按钮,当此按钮获得点击更新网格中的值时。
因为现在您正在 "DGV_CellValueChanged" 函数中更改值,请再次调用该函数,即它正在创建递归循环并且您正在获得 stackoveflow excpetion
问题已解决...我只是将事件从 CellValueChange 更改为 CellEndEdit
private void DGV_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//Rest of the code
}
如果同一行的任何一个单元格值发生变化,我想更新一行的 datagridview 单元格的值。
这是我的代码...
private void DGV_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
try
{
int Qty = Convert.ToInt32(DGV["Qty", rowspan].Value);
decimal Rate = Convert.ToDecimal(DGV["Rate", rowspan].Value);
decimal amount = Convert.ToDecimal(DGV["Amount", rowspan].Value);
decimal Dis1 = Convert.ToDecimal(DGV["Dis1", rowspan].Value);
decimal Dis1_ = Convert.ToDecimal(DGV[9, rowspan].Value);
decimal Dis2 = Convert.ToDecimal(DGV["Dis2", rowspan].Value);
decimal Dis2_ = Convert.ToDecimal(DGV[11, rowspan].Value);
decimal GST = Convert.ToDecimal(DGV["GST", rowspan].Value);
decimal GST_ = Convert.ToDecimal(DGV[13, rowspan].Value);
decimal NetAmt = Convert.ToDecimal(DGV["NetAmt", rowspan].Value);
DGV["Qty", rowspan].Value = Qty;
DGV["Rate", rowspan].Value = Rate;
DGV["Amount", rowspan].Value = Qty * Rate;
DGV["Dis1", rowspan].Value = Convert.ToDecimal(((Dis1_ * NetAmt) / 100).ToString("N1"));
DGV[9, rowspan].Value = Convert.ToDecimal(((Dis1 / NetAmt) * 100).ToString("N1"));
DGV["Dis2", rowspan].Value = Convert.ToDecimal(((Dis2_ * NetAmt) / 100).ToString("N1"));
DGV[11, rowspan].Value = Convert.ToDecimal(((Dis2 / NetAmt) * 100).ToString("N1"));
DGV["GST", rowspan].Value = Convert.ToDecimal(((GST_ * NetAmt) / 100).ToString("N1"));
DGV[13, rowspan].Value = Convert.ToDecimal(((GST_ / NetAmt) * 100).ToString("N1"));
DGV["NetAmt", rowspan].Value = CalculateNetAmount(amount, Dis1, Dis2, GST);
lblAmount.Text = totalamount().ToString();
}
catch (WhosebugException ex)
{
loglbl.Text = ex.Message;
}
}
目前我正在关注 WhosebugExcpetion...
An unhandled exception of type 'System.WhosebugException' occurred in System.Windows.Forms.dll
有什么建议吗?如何?
我的建议是,您可以在网格中使用额外的按钮 "Update" 按钮,当此按钮获得点击更新网格中的值时。
因为现在您正在 "DGV_CellValueChanged" 函数中更改值,请再次调用该函数,即它正在创建递归循环并且您正在获得 stackoveflow excpetion
问题已解决...我只是将事件从 CellValueChange 更改为 CellEndEdit
private void DGV_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//Rest of the code
}