举例:有3列,分别是
数量 单价 金额
计算公式是:
数量*单价=金额。
特殊需求是,可以输入金额,反算单价。
遇到的问题是,如果数量或单价变化触发计算金额,而金额变化触发反算单价,于是导致死循环了。
用的控件是dev的gridcontrol。
在官方论坛找到相似的问题了。附上链接供后来者参考。
https://www.devexpress.com/Support/Center/Question/Details/Q200064/cellvaluechanged-event-infinity-loop
尝试下:校验计算结果和文本值是否一致,一致就停止计算。
恩,这是一种方法,要是能够有更“优美”的方法就更好。
或者在set{}里,设定value与目标值不一样,才进行赋值。
单价.Changed += 单价Changed;
金额.Changed += 金额Changed;
void 单价Changed(){
金额.Changed -= 金额Changed;
金额 = 单价*数量;.
金额.Changed += 金额Changed
}
void 金额Changed(){
单价.Changed -= 单价Changed;
单价 = 金额/数量;
单价.Changed += 单价Changed;
}
原理是这样的,但是没法用到实际上面,事件是绑定到表格的,不可能取消表格的事件委托。
在离开事件里做计算就行了,给控件赋值的时候不会触发离开事件的
编辑器确实有离开事件,但是如果用离开事件,即使不修改也会触发重算,不太友好。
加个状态量进行阻断不就行了。
按理来说 单价不是应该是个固定量吗