【问题标题】:Calculation on a hidden field计算隐藏字段
【发布时间】:2014-03-22 08:50:51
【问题描述】:

我隐藏了一个字段,以便在显示时(选中复选框)执行特定计算。

procedure TForm1.cxCheckBox1Click(Sender: TObject);
var
C:TcxGridDBColumn;
begin
if ABSTable1.FieldByName('CENIK_IME').AsString = 'PAK' then begin
C := cxGrid2dbtableview1.GetColumnByFieldName('TT');
if Assigned(C) then C.Visible := not C.Visible;
ABSQuery2.Edit;
ABSQuery2.FieldByName('TOTAL').AsCurrency := (ABSQuery2.FieldByName('TOTAL').AsCurrency) + (ABSQuery2.FieldByName('TT').AsCurrency);
ABSQuery2.Refresh;
end;
end;

问题是每次我选中或取消选中复选框时,我的 TOTAL 都会变得越来越大。有什么方法可以防止复选框每次被选中或取消选中时求和?

我在查询的计算字段上也有这个;

procedure TForm1.ABSQuery2CalcFields(DataSet: TDataSet);
begin
ABSQuery2.FieldByName('TT').Value:= (ABSQuery2.FieldByName('DAYS').AsCurrency) * 1.01 ;
end;

这一切都是在临时表上完成的,该表仅用于这种场合。内容一直被删除....

【问题讨论】:

  • 保留一个表明您是否已将 TT 添加到 TOTAL 的字段。
  • 隐藏/取消隐藏列与事物有什么关系? (是什么决定了该列是否应该可见/不可见?)我也不确定 OnCalcFields 中代码的意图 - Days 将如何仅仅因为复选框被选中/取消选中而改变?

标签: delphi


【解决方案1】:

如果该列被隐藏,您不需要减去 ABSQuery2.FieldByName('TT').AsCurrency 吗? 如果找到TT,也只更改Total? 所以:

procedure TForm1.cxCheckBox1Click(Sender: TObject);
var
  C:TcxGridDBColumn;
begin
  if ABSTable1.FieldByName('CENIK_IME').AsString = 'PAK' then begin
    C := cxGrid2dbtableview1.GetColumnByFieldName('TT');

    if Assigned(C) then 
    begin
      C.Visible := not C.Visible;

      ABSQuery2.Edit;  
      if C.Visible then
        ABSQuery2.FieldByName('TOTAL').AsCurrency := (ABSQuery2.FieldByName('TOTAL').AsCurrency) + (ABSQuery2.FieldByName('TT').AsCurrency)
      else
        ABSQuery2.FieldByName('TOTAL').AsCurrency := (ABSQuery2.FieldByName('TOTAL').AsCurrency) - (ABSQuery2.FieldByName('TT').AsCurrency);
      ABSQuery2.Post;
      ABSQuery2.Refresh;
    end;
  end;
end;

【讨论】:

  • 为什么我会遇到访问冲突?
  • 好的,抱歉,已编辑以包含完整功能,希望能修复它。
  • 如果查询为空,如何防止用户使用复选框?
  • 尝试添加如果不是 ABSQuery2.Active 或 (ABSQuery2.Bof 和 A​​BSQuery2.Eof) 然后退出;到程序开始
猜你喜欢
  • 2013-12-22
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 2019-01-31
  • 2011-01-02
相关资源
最近更新 更多