公式:单价*数量 = 金额刚开始我是用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;现在执行到红色那行报错,不知道为什么,高手帮帮忙。
后来我改用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;现在执行到红色那行报错,不知道为什么,高手帮帮忙。
在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;
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;
adsADO.FieldByName('JE').AsFloat = adsADO.FieldByName('JE').AsFloat * adsADO.FieldByName('JE').AsFloat;