C# - Recuriveループを引き起こすDatagridview複数セルの価値の変化

同じ行のいずれかのセル値が変更された場合、行の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 (StackOverflowException ex)
        {
            loglbl.Text = ex.Message;
        }
    }

現在私は以下のStackOverflowExcpetionを得ています...

タイプが 'System.StackOverflowException'の未処理の例外   System.Windows.Forms.dllで発生しました。

なにか提案を?の仕方?

1
なぜ同じ関数に値を代入しているのですか...それは問題です...しかし、あなたはボタンをグリッドの "更新"に置くと、それはすべての値を更新します
追加された 著者 Pranay Rana,
なぜ同じ関数に値を代入しているのですか...それは問題です...しかし、あなたはボタンをグリッドの "更新"に置くと、それはすべての値を更新します
追加された 著者 Pranay Rana,
なぜ同じ関数に値を代入しているのですか...それは問題です...しかし、あなたはボタンをグリッドの "更新"に置くと、それはすべての値を更新します
追加された 著者 Pranay Rana,

4 答え

これに対する私の提案は、あなたがあなたのグリッドの「更新」ボタンとこのボタンがグリッドの更新値をクリックする時に追加のボタンを利用することです。

今は "DGV_CellValueChanged"関数の値を変更しているので、その関数をもう一度呼び出します。つまり、再帰的なループが作成され、stackoveflowの興奮が発生します。

1
追加された
ああ…手に入れた…
追加された 著者 Muhammad Qasim Ashraf,

これに対する私の提案は、あなたがあなたのグリッドの「更新」ボタンとこのボタンがグリッドの更新値をクリックする時に追加のボタンを利用することです。

今は "DGV_CellValueChanged"関数の値を変更しているので、その関数をもう一度呼び出します。つまり、再帰的なループが作成され、stackoveflowの興奮が発生します。

1
追加された
ああ…手に入れた…
追加された 著者 Muhammad Qasim Ashraf,

これに対する私の提案は、あなたがあなたのグリッドの「更新」ボタンとこのボタンがグリッドの更新値をクリックする時に追加のボタンを利用することです。

今は "DGV_CellValueChanged"関数の値を変更しているので、その関数をもう一度呼び出します。つまり、再帰的なループが作成され、stackoveflowの興奮が発生します。

1
追加された
ああ…手に入れた…
追加された 著者 Muhammad Qasim Ashraf,

問題が解決しました...イベントをCellValueChangeからCellEndEditに変更しました

private void DGV_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
  //Rest of the code
}
0
追加された