现在想实现这样的功能:在DBGrid中填写a列的数据时,当焦点离开a列时,b列由a列按照某种关系计算出来,但是所列出的所有记录的b列计算方法是不同的,也就是说对于b列的计算要分为3种情况。
用计算字段可以实现这样的功能么?

解决方案 »

  1.   

    自己算好了填进去,如果用自动计算字段可以在onCalcFields事件里写
      

  2.   

    可是在OnCalcFields中怎么区分这3种计算方法呢?也就是说对于第1到第N条记录采用一种计算方法
    第N+1到第N+n条记录采用其他的计算方法?
    手动计算就没意义了吧?
      

  3.   


    procedure TForm1.ADOQuery1aChange(Sender: TField);
    begin
      if 条件1 then
        Sender.DataSet.FieldByName('b').AsFloat := Sender.AsFloat * 1.1
      else if 条件2 then
        Sender.DataSet.FieldByName('b').AsFloat := Sender.AsFloat * 1.2
      else if 条件3 then
        Sender.DataSet.FieldByName('b').AsFloat := Sender.AsFloat * 1.3
    end;
      

  4.   

    你应该有一个条件,根据记录有什么意思呢!
    procedure TForm1.ADOQuery1aChange(Sender: TField);
    begin
      if Sender.DataSet.RecNo >0 and Sender.DataSet.RecNo <1000 then       
        Sender.DataSet.FieldByName('b').AsFloat := Sender.AsFloat * 1.1
      else if Sender.DataSet.RecNo >=1000 and Sender.DataSet.RecNo <2000 then
        Sender.DataSet.FieldByName('b').AsFloat := Sender.AsFloat * 1.2
      else if Sender.DataSet.RecNo >=2000 000 then
        Sender.DataSet.FieldByName('b').AsFloat := Sender.AsFloat * 1.3
    end;