我想实现的效果是:当我编辑一个单元格时,另一个单元格的值会自动更新即:C=A-B;但在更新前要做验证,那么如何写呢,发现如果写在validing里会出现死循环。
我的代码:private void gv_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            iSpSuplus = Tg.Base.DataExd.GetInt(gv["gvColSpBillNum", e.RowIndex].Value) - Tg.Base.DataExd.GetInt(e.FormattedValue);
            if (iSpSuplus < 0)
            {
                e.Cancel = true;
                Util.ShowAlert("冲销数量不得大于原数量");
                gv.CancelEdit();
            }
            else
            {
                gv.Rows[e.RowIndex].Cells["gvColSurplusNum"].Value = iSpSuplus;
            }
        }怎么搞作啊

解决方案 »

  1.   

    如下,在最上边加上要判断的列验证,以终止 试试
    private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
                {                //可编辑的列
                    if (e.ColumnIndex != 2 && e.ColumnIndex != 3)
                        return;                iSpSuplus = Tg.Base.DataExd.GetInt(gv["gvColSpBillNum", e.RowIndex].Value) - Tg.Base.DataExd.GetInt(e.FormattedValue);
                    if (iSpSuplus < 0)
                    {
                        e.Cancel = true;
                        Util.ShowAlert("冲销数量不得大于原数量");
                        gv.CancelEdit();
                    }
                    else
                    {
                        gv.Rows[e.RowIndex].Cells["gvColSurplusNum"].Value = iSpSuplus;
                    }
                }
      

  2.   

    把你的处理操作写到CellValueChanged事件里,至于计算可以使用SetRowCellValue设置。
      

  3.   


    +10086本来就是两个事件,一个是验证,一个是赋值,赋值肯定是当验证通过之后的,所以最好放在cellvaluechanged事件中。
    验证不通过,值肯定是不会变的。
    事件上,我建议写自定义控件,验证不放在CellValidating中,而是写在继承的textbox中,不过这有点复杂了,你的需求应该用不着