DBGridEh中根据单价和数量如何计算金额?
单价和数量输入完后,在数量单元格往任何方向移动(上下左右),金额都能自动计算。如何实现?
- 不要在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; - 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' - 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;我试了,这样可以实现。 - 将DataSet换成你自己用的数据集的名称。
DBGridEh中根据单价和数量如何计算金额?的更多相关文章
- 深度分析如何在Hadoop中控制Map的数量
深度分析如何在Hadoop中控制Map的数量 guibin.beijing@gmail.com 很多文档中描述,Mapper的数量在默认情况下不可直接控制干预,因为Mapper的数量由输入的大小和个数 ...
- js在数组arr中随机获取count数量的元素
// 在数组arr中随机获取count数量的元素; const getRandomArrayElements = (arr, num) => { // 新建一个数组,将传入的数组复制过来,用于运 ...
- DbGridEh中改变行的颜色
DbGridEh中改变行的颜色 代码也挺简单的,只是当时没有想到: if ds2.FieldByName('AutoRead').AsInteger=0 thenbegin DBGridEh1.Ca ...
- HihoCoder1084: 扩展KMP(二分+hash,求T串中S串的数量,可以失配一定次数)
时间限制:4000ms 单点时限:4000ms 内存限制:256MB 描述 你知道KMP吗?它是用于判断一个字符串是否是另一个字符串的子串的算法.今天我们想去扩展它. 在信息理论中,在两个相同长度的字 ...
- 用肘方法确定 kmeans 聚类中簇的最佳数量
说明: KMeans 聚类中的超参数是 K,需要我们指定.K 值一方面可以结合具体业务来确定,另一方面可以通过肘方法来估计.K 参数的最优解是以成本函数最小化为目标,成本函数为各个类畸变程度之和,每个 ...
- JavaScript由单价、数量计算总价
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 编程写一个方法时,注意方法中传参数的数量最好不要超过5个,超过5个怎么办?可以用struct或class,或一个字典类
图 1 一.从图1发现了什么问题呢? 答案:1.参数传的的太多了:2.另外注释也没写好. 说明:一个方法中,传参数的数量最好不要超过5个. 应该采用:struct或class,或一个字典类都行.其中 ...
- dbgrideh 中的keylist,picklist的用法
dbgrideh procedure TForm1.FormCreate(Sender: TObject); begin DBGridEh1.DataSource:=DataSource1; Data ...
- hao123 百度品专 按品类 计算 下单数量 商品数量 下单金额?
SELECT * FROM t_tag_source WHERE s_name='hao123'; +--------+----------+---------+--------+-------- ...
随机推荐
- Idea和eclipse安装activiti插件
eclipse安装:help>install new software>add 有外网状态下 输入 :http://www.activiti.org/design ...
- 基于Python3+Requests的贴吧签到助手
因为总是忘记签到,所以尝试写了一个签到脚本,因为使用的是Python3,所以没法使用Urllib2,于是选择了Requests,事实证明,Requests比Urllib2好用.整体思路比较简单,就是模 ...
- SIGAI机器学习第二十一集 AdaBoost算法2
讲授Boosting算法的原理,AdaBoost算法的基本概念,训练算法,与随机森林的比较,训练误差分析,广义加法模型,指数损失函数,训练算法的推导,弱分类器的选择,样本权重削减,实际应用. 大纲: ...
- RookeyFrame Bug 编号显示 系统自动生成 的问题,有时候依旧会显示text文本框
编号显示 系统自动生成 的问题,有时候依旧会显示text文本框 1.在线新建model -> 启用编码规则 -> 新建字段Code(主键) 2.跟Code字段 创建编码规则 3.新增菜单 ...
- 用provide/inject来实现简单的vuex状态管理功能
在开发的时候,经常会涉及到组件之间的通信.简单的有父子组件的通信,兄弟组件的通信通常可以借助Bus来进行.当然也可以用vuex来进行状态管理,但是,有时候用vuex未免有把简单的问题复杂化. 如果要进 ...
- make和rpm的编译、打包总结
1 make工具使用 1.1 makefile基本规则 Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作. Makefile的规则: tar ...
- 一个有趣的js隐式转换的问题
一个有趣的js隐式转换的问题 在chrome的控制台中打印一下表达式 [] + {} //结果为 [object object] 然后调整顺序打印 {} + [] //结果为 0 然后将两个表达式组合 ...
- Deepin Create/Delete Folder refresh
Did u have a problem whth the deepin file manager,Everthime I create/delete a Folder of File i have ...
- 64位内核第三讲,Windbg的使用.以及命令
目录 一丶驱动的调试. 1.线程 2.断点 3.内存查看命令 4.修改内存命令 5.栈相关操作命令 6.进程线程命令(内核命令) 一丶驱动的调试. 编写驱动免不了调试.所以这里介绍一下WinDbg的常 ...
- 编译器错误 CS0540
编译项目报错:包含类型不实现接口,CS0540 原因:试图在非派生自接口的类中实现接口成员. 解决方案: 删除接口成员的实现,或将接口添加到类的基类列表. 下面的两个示例生成 CS0540: 一. / ...