DBGridEh中根據單價和數量如何計算金額?

單價和數量輸入完後,在數量單元格往任何方向移動(上下左右),金額都能自動計算。如何實現?post

    1.  

      不要在UI元素的事件中計算字段,你能夠在單價字段和數量字段的OnChange事件中進行計算。假設數據集名稱爲DataSet,在數據模塊中編寫一個過程:
      procedure CalcMoney(Sender: TField);
      begin
        if (DataSet.State in dsEditModes) and (not DataSet.FieldByName('Qty').IsNull) and (not DataSet.FieldByName('Price').IsNull)
       then
        DataSet.FieldByName('Money').AsCurrency := DataSet.FieldByName('Qty').AsFloat * DataSet.FieldByName('Price').AsCurrency;
      end;而後在數據集的AfterOpen和BeforeClose事件中添加以下代碼:
      AfterOpen:
        DataSet.FieldByName('Qty').OnChange := CalcMoney;
        DataSet.FieldByName('Price').OnChange := CalcMoney;
      BeforeClose;
        DataSet.FieldByName('Qty').OnChange := Nil;
        DataSet.FieldByName('Price').OnChange := Nil;
        

       

    2.  

      procedure CalcMoney(Sender: TField);
      begin
        if (Sender.DataSet.State in dsEditModes) and (not Sender.DataSet.FieldByName('Counts').IsNull)
         and (not Sender.DataSet.FieldByName('Price').IsNull)
        then 
          Sender.DataSet.FieldByName('Money').AsCurrency := Sender.DataSet.FieldByName('Counts').AsFloat * Sender.DataSet.FieldByName('Price').AsCurrency;
      end;改爲這個以後,編譯時提示:
      E2009 Incompatible types:'method pointer and regular procedure'
        

       

    3.  

      procedure TForm1.CalcMoney(Sender: TField);
      begin
        if (Sender.DataSet.FieldByName('Counts').IsNull) then
          Sender.DataSet.FieldByName('Counts').AsFloat := 0;
        if (Sender.DataSet.FieldByName('Price').IsNull) then
          Sender.DataSet.FieldByName('Price').AsCurrency := 0;
        if (Sender.DataSet.State in dsEditModes) and (not Sender.DataSet.FieldByName('Counts').IsNull)
         and (not Sender.DataSet.FieldByName('Price').IsNull)
        then
          Sender.DataSet.FieldByName('Money').AsCurrency := Sender.DataSet.FieldByName('Counts').AsFloat * Sender.DataSet.FieldByName('Price').AsCurrency;
      end;我試了,這樣能夠實現。
        

       

    4.  

      將DataSet換成你本身用的數據集的名稱。
相關文章
相關標籤/搜索