Datagridview中有5列:数量,单价,折扣率,折扣额,金额。
公式为:数量*单价*(1-折扣率)=金额。
动作:1)当我更改数量、单价,折扣率时,自动甲酸折扣额,金额这2列。
      2)当更改折扣额、金额时,倒算折扣率这1列
      3)若这5列都有数据,则将差额放入单价或者折扣率中。我用dataGridView_CellValueChanged中判断会进入死循环。不知道各位大虾是否有其他方法?

解决方案 »

  1.   

    dataGridView_CellValueChanged 的时候 判读当前列是不是计算结果列,如果是计算结果列就不再处理。这样就不会死循环啦!
      

  2.   

    只要单元格数据变化,就会触发,包括你赋值,所以会死循环
    试试 CellEndEdit 事件
      

  3.   

    当数量为10,单价为20,折扣率为0,CellValueChanged就会得出金额=200,
    然后当金额改变时,又要反算单价是20。
    若考虑到单价的小数点后的位数无穷时,就会在金额与单价的无穷循环中来回反复。
      

  4.   

    设置/判断一个标志位,或暂时抑制CellValueChanged,只要不陷入循环就可以了:void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        dgv.CellValueChanged -= new DataGridViewCellEventHandler(dgv_CellValueChanged);
        try
        {
            //更改...
        }
        finally
        {
            dgv.CellValueChanged += new DataGridViewCellEventHandler(dgv_CellValueChanged);
        }
    }