2014-02-21 41 views
0

我隐藏了一个字段,因此当它显示时(在复选框选中时)它会执行一定的计算。隐藏字段上的计算

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; 

问题是,我每次选中或清除该复选框我的总变得越来越大。任何方式来防止每次检查或取消选中时复选框加总?

我也有这对查询的计算领域;

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

这是所有在临时表中完成的,仅用于临时表。内容被删除所有的时间....

+0

保留一个字段,表明您是否已将TT添加到TOTAL。 –

+0

隐藏/取消隐藏栏目与事物有什么关系? (什么决定列是否应该是可见的/不可见的?)我也不确定代码在OnCalcFields中的意图 - 仅仅因为复选框被选中/未选中,“Days”将如何改变? –

回答

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; 
+0

为什么我得到访问冲突? – user3181689

+0

好吧,对不起,编辑包含全功能,希望能修复它。 –

+0

谢谢!非常感谢...... – user3181689