DBGridEh中根据单价和数量如何计算金额?

单价和数量输入完后,在数量单元格往任何方向移动(上下左右),金额都能自动计算。如何实现?

    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换成你自己用的数据集的名称。

posted on   癫狂编程  阅读(591)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2018-10-18 Delphi中Form的position属性与代码自定义窗体位置
2018-10-18 如何让窗口显示在电脑屏幕中间

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
好的代码像粥一样,都是用时间熬出来的
点击右上角即可分享
微信分享提示