CXGRID中有多列  包括  数量,单价,金额,其中金额列为计算列
先按BUTTON1 在CXGRID中增加一列 我使用 ADOQuery1.AppendRecord实现
然后更改 数量 和单价列,金额列自动会变化。如果没有代码1 那么执行代码2,在CXGRID中会增加一行记录
如果没有代码2,那么执行代码1,金额列会变化。但两个代码都存在的情况下 报错 说 '' is not a valid floating point valueprocedure TForm1.ADOQuery1amountChange(Sender: TField);//代码1
begin
  if Sender.Text='' then
    Sender.Text:='0';
  ADOQuery1.FieldByName('summoney').AsFloat:=ADOQuery1.fieldbyname('amount').AsFloat * ADOQuery1.fieldbyname('price').AsFloat;
end;procedure TForm1.Button1Click(Sender: TObject); //代码2
begin
  ADOQuery1.AppendRecord(['2',Edit1.Text,0,0,0,'aaa','bbb']);
end;

解决方案 »

  1.   

    procedure TForm1.ADOQuery1amountChange(Sender: TField);//代码1
    begin
      if Sender.isNull then exit;
      ADOQuery1.FieldByName('summoney').AsFloat:= sender.value * ADOQuery1.fieldbyname('price').AsFloat;
    end;procedure TForm1.Button1Click(Sender: TObject); //代码2
    begin
      ADOQuery1.AppendRecord(['2',Edit1.Text,0,0,0,'aaa','bbb']);  // 這裏 Edit1.text    是對應哪一個字段,字符還是浮點或整型
    end;
    兩個地方都有可能
      

  2.   

    TForm1.ADOQuery1amountChange(Sender: TField);//代码1是不是写在这个事件里的 还是说写在其他的事件里面的?
      

  3.   


    转换成Float时出错,所以你传值时,一定要保证字段的对应,并且数值型字段赋值,数值要合法
      

  4.   

    字段类型:amount,price,summoney
            varchar(50) varchar(50) decimal
      

  5.   


    ADOQuery1.FieldByName('summoney').AsFloat:=ADOQuery1.fieldbyname('amount').AsFloat * ADOQuery1.fieldbyname('price').AsFloat;
    看一下AsFloat的值,估计时一些字段内容不能转为Float
      

  6.   

    if Sender.isNull then exit;
    if (ADOQuery1.fieldbyname('price').AsString<>'') and (ADOQuery1.fieldbyname('amount').AsString<>'') then
      ADOQuery1.FieldByName('summoney').AsFloat:= ADOQuery1.fieldbyname('amount').AsFloat * ADOQuery1.fieldbyname('price').AsFloat;
    这样可以了 这个有什么不同呀