2014-02-21 58 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