一个奇怪的dbgridEH求和函数调用问题
自定义的一个计算函数如下:
function Txsthd.re_calc:boolean;
var dd:double;
begin
with ADOQuery2 do
begin
dd:=FieldByName('S1').AsFloat + FieldByName('S2').AsFloat + FieldByName('S3').AsFloat + FieldByName('S4').AsFloat + FieldByName('S5').AsFloat + FieldByName('S6').AsFloat + FieldByName('S7').AsFloat + FieldByName('S8').AsFloat + FieldByName('S9').AsFloat + FieldByName('S10').AsFloat;
if dd <> 0 then
FieldByName('HJSL').value := dd;
FieldByName('je').Value:=strtofloat(formatfloat('0.##',FieldByName('HJSL').Value*FieldByName('dj').Value));
dd:=FieldByName('zk').Value;
FieldByName('zkdj').Value:=strtofloat(formatfloat(SYS_DJXS_FORMAT,dd*FieldByName('dj').Value));
FieldByName('zkje').Value:=strtofloat(formatfloat('0.##',FieldByName('HJSL').Value*FieldByName('zkdj').Value));
FieldByName('sj').Value:=strtofloat(formatfloat('0.##',(FieldByName('sll').Value/100)*FieldByName('zkje').Value));
FieldByName('hsje').Value:=FieldByName('sj').Value+FieldByName('zkje').Value;
dd:=FieldByName('sll').Value;
FieldByName('hsdj').Value:=strtofloat(formatfloat(SYS_DJXS_FORMAT,(dd/100)*FieldByName('zkdj').Value))+FieldByName('zkdj').Value;
//辅助数量
if FieldByName('HJSL').Value=0 then
FieldByName('fzsl').Value:=0
else
FieldByName('fzsl').Value:=strtofloat(formatfloat(SYS_DWRATIONXS_FORMAT,(FieldByName('sl').Value)/FieldByName('dunitratio').Value));
end;
result:=true;
end;
调用时在S1、S2、S3、S4、S5、S6、S7、S8、S9、S10字段onupdatedata事件中均已调用re_calc,但出现HJSL的值不等于S1、S2、S3、S4、S5、S6、S7、S8、S9、S10之和。经过跟踪调试发现第一次按下的数量回车后HJSL能取到正确的值,但接着按第二个、第三个、第四个、。。。。。发现最终得数取得的值不含最后一数。即如果分别在S1、S2、S3、S4、S5、S6、S7、S8、S9、S10字段输入的是1、2、3、4、5、6、7、8、9、10的话HJSL取得的值为45,
希望有经验的前辈能指点一下,谢谢!