做到:table中第三列=第一列+第二列 决绝给分 ( 积分: 100 )

  • 主题发起人 主题发起人 zhengjp
  • 开始时间 开始时间
上面的代码都贴出来了,你还要怎么写?不清楚楼主要什么?
 
唯一正解:
procedure TForm1.Table1beforePost(...);//行切换的时候执行的这里机会多
begin
if Table1.Modifyed then //Table没有改变就不计算
计算相加结果语句
..............
end;
还要加上的是
procedure TForm1.dbgridehColExit(...);//列切换的时候执行的这里机会多
内容同上
.........
计算相加结果语句
..............
end;
 
楼主应该把实现的正确结果公布出来。
等待……
 
在Table的数据集的AfterOpen事件中写的第一、第二列的OnValidate事件
FieldByName('c1').OnValidate := OnValidate;
FieldByName('c2').OnValidate := OnValidate;

procedure TForm1.OnValidate(Sender: TField);
begin
Sender.DataSet.FieldByName('c3').AsInteger :=
Sender.DataSet.FieldByName('c1').AsInteger +
Sender.DataSet.FieldByName('c2').AsInteger;
end;
 
是一边输入,一边就可以计算结果,还是转移到其它格子才计算结果,后者用计算字段就行。
 
在adoxxx的OnCalcFields里面写,看这个名字就知道它是用来干么的了(跟大家说的一样,注意有效值的判断)
 
在DataSet事件的OnCalcFields里面写代码
DataSet.Fields[0].AsInteger=DataSet.Fields[1].AsInteger + DataSet.Fields[2].AsInteger
 
OnCalcFields事件,只對計算字段;才會執行OnCalcFields代碼...
如上:DataSet.Fields[0].AsInteger=DataSet.Fields[1].AsInteger + DataSet.Fields[2].AsInteger 是沒用的..請看清問題!!
 
试试在dbgrideh的onkeydown里面+dbgrideh.selectedfield来处理
 
没办法只能用计算字段。。问题就到这里吧。。非常感谢各位积极的参于。给分了!
 
多人接受答案了。
 
后退
顶部