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
}