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

jiaxianglei 2008-01-22 10:26:20
单价和数量输入完后,在数量单元格往任何方向移动(上下左右),金额都能自动计算。如何实现?
...全文
135 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
禹爸爸 2008-01-23
  • 打赏
  • 举报
回复
将DataSet换成你自己用的数据集的名称。
jiaxianglei 2008-01-22
  • 打赏
  • 举报
回复
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'
jiaxianglei 2008-01-22
  • 打赏
  • 举报
回复
能不能写得详细一点?谢谢
jiaxianglei 2008-01-22
  • 打赏
  • 举报
回复
DataSet未定义
禹爸爸 2008-01-22
  • 打赏
  • 举报
回复
不要在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;
jiaxianglei 2008-01-22
  • 打赏
  • 举报
回复
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;

我试了,这样可以实现。

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧