公式:单价*数量 = 金额刚开始我是用onColExit事件,可是这样的话,如果编辑单价或数量之后,仍点在单价和数量这一列的话,金额值不会变
后来我改用onCellClick事件,这个事件也不行,如果我编辑单价或数量之后,换行了,金额值还是不变现在用的onDataChange事件
代码如下
if DBGrid.ReadOnly = False then
begin
  if (Field.FieldName = 'DJ') or (Field.FieldName = 'SHL') then
    adsADO.FieldByName('JE').AsFloat = adsADO.FieldByName('JE').AsFloat * adsADO.FieldByName('JE').AsFloat;
end;现在执行到红色那行报错,不知道为什么,高手帮帮忙。

解决方案 »

  1.   


    在DBGRID对应的Query里处理。下面是我处理方法procedure TCaiGouRuKu080701Form.Query1BDEDesigner17Change(Sender: TField);
    var SellPrice:Currency;
    begin
      DBgrid1.DataSource.DataSet.FieldByName('成本金额').AsCurrency:=
        GetRoundData2(DBgrid1.DataSource.DataSet.FieldByName('成本单价').AsCurrency*DBgrid1.DataSource.DataSet.FieldByName('入库数量').AsCurrency);
      //增加批次时重新计算售价
      if (Query1.FieldByName('标志').Asstring='1') and (not CheckBox2.Checked) then
      begin
       //计算售价(存储过程)
       with Query2 do
       begin
        close;
        sql.Clear;
        sql.Add('declare @kufang varchar(50)');
        sql.Add('declare @CostPrice money');
        sql.Add('declare @SellPrice money');
        sql.Add('set @kufang=:tmp1');
        sql.Add('set @CostPrice=:tmp2');
        sql.Add('exec Kf_GetSellPrice @kufang,@CostPrice,@SellPrice output');
        sql.Add('select @SellPrice as SellPrice');
        parambyname('tmp1').Asstring:=FlatComboBox1.Text;
        parambyname('tmp2').AsCurrency:=DBgrid1.DataSource.DataSet.FieldByName('成本单价').AsCurrency;
        prepare;
        Open;
        SellPrice:=FieldByName('SellPrice').AsCurrency;
       end;
       //更新售价
       DBgrid1.DataSource.DataSet.FieldByName('销售单价').AsCurrency:=SellPrice;
       DBgrid1.DataSource.DataSet.FieldByName('优惠售价').AsCurrency:=SellPrice;
      end;
    end;
      

  2.   

    肯定啊!!多年就是这样用的!
    procedure TCaiGouRuKu080701Form.Query1BDEDesigner17Change(Sender: TField); 
    var SellPrice:Currency; 
    begin 
      DBgrid1.DataSource.DataSet.FieldByName('成本金额').AsCurrency:= 
        GetRoundData2(DBgrid1.DataSource.DataSet.FieldByName('成本单价').AsCurrency*DBgrid1.DataSource.DataSet.FieldByName('入库数量').AsCurrency); 
    end;
      

  3.   

    如果这个金额字段是在TABLE中定义的,可以尝试在 单价和数量的两个字段的 onChange 里合计。哪果不是在表里面的定义的,可以建一个 Calculated 字段,然后在 ONCalcFields 里处理
      

  4.   

    可以在ADOQuery添加字段在OnValidate事件写!
      

  5.   

    在beforepost時寫那句
    adsADO.FieldByName('JE').AsFloat = adsADO.FieldByName('JE').AsFloat * adsADO.FieldByName('JE').AsFloat;