【发布时间】:2016-12-18 07:55:43
【问题描述】:
我有一个带有计算字段的 dbGrid ... 是否有任何解决方案可以向计算字段添加不同的表达式? (每一行都有自己的表达方式)
【问题讨论】:
-
您使用的是哪个 Delphi 版本?
-
向我们展示一些您迄今为止所做的代码!谢谢!
标签: delphi
我有一个带有计算字段的 dbGrid ... 是否有任何解决方案可以向计算字段添加不同的表达式? (每一行都有自己的表达方式)
【问题讨论】:
标签: delphi
有没有办法添加不同的表达方式
这取决于您所说的“添加”是什么意思。你当然可以改变表达方式 用于根据其他字段中的值计算字段的值 在数据行中。例如,给定一个带有字段的 Order 数据集
OrderTotal : TFloatField; // type = fkCalculated
OrderDiscount : TFloatField; // type = fkData
OrderCashPayment : TBooleanField; // type = fkData
OrderPricePerUnit : TFloatField; // type = fkData
OrderShipping : TFloatField; // type = fkData
OrderUnits: TIntegerField; // type = fkData
那么你可以拥有
procedure DataModule1.OrderCalcFields(DataSet : TDataSet);
begin
if OrderCashPayment.AsBoolean then begin
// don't charge for shipping
OrderTotal.AsFloat := OrderPricePerUnit.AsFloat * (1 - OrderDiscount.AsFloat)
end
else begin
OrderTotal.AsFloat := OrderPricePerUnit.AsFloat * (1 - OrderDiscount.AsFloat) +
+ OrderShipping.AsFloat;
end;
end;
另一方面,如果您要问的表达式是否用于计算
可以在运行时更改字段的值,答案也是“是”,但您
必须小心你如何做到这一点,以避免过多影响性能。你
可以使用可用于 Delphi 的表达式评估器对象之一
评估作为文本字符串提供的表达式,最好是一个
仅当表达式(表达式)被更改并构建时才解析表达式
在每个OnCalcFields 事件中重复评估的表达式树。免费软件 Jedi 库包括一个 Pascal 解释器,可用于运行时表达式评估,并允许表达式包含来自例如的值。字段值,但我不记得它是否可以只构建一次表达式树。
【讨论】:
您必须使用函数根据字段的值计算表达式。
例如,我们想在dbdemos.mdb的employee表中添加一个名为Tax的字段,根据Salary计算>.
procedure TForm1.ADOTable1CalcFields(DataSet: TDataSet);
var
nSalary, nTax: Double;
begin
nSalary := ADOTable1Salary.AsFloat;
if nSalary < 30000 then
nTax := 10
else if nSalary < 40000 then
nTax := 20
else
nTax := 30;
ADOTable1Tax.AsFloat := nSalary * nTax / 100;
end;
【讨论】:
不可以,但您可以在表格中拥有多个计算字段并根据条件显示/隐藏它们。
【讨论】: