如何从计算记录中划分百分比用DBGRID Delphi汇总

时间:2016-05-12 10:30:05

标签: delphi dbgrid

我有dbgrid显示列小计和列百分比,如何显示此公式中的列百分比:(小计/大计)* 100%?详情请见下图

enter image description here

我无法修改我的SQL,因为我的SQL非常复杂,所以我认为解决方案可能使用计算字段,不是吗?有人可以帮我解决这个问题。 谢谢你提前。

1 个答案:

答案 0 :(得分:4)

以下假设您的数据集实际上并不包含您显示的最后一行,包含“111077,100”的那一行 - 如果有,那么我在下面显示的计算GrandTotal的步骤是不必要的,并且您只需要填充Percent计算字段,这是微不足道的。

如果您的数据集是TClientDataSet,则可以使用以下方法轻松实现百分比值 表示GrandTotal的TAggregateField和表示每个数据行对GrandTotal的贡献的计算字段的组合。请参阅下面的代码。

如果您还没有使用TClientDataSet,那么您有几个选项, 包括

  • 如果您的DataSet属于支持aggregate fields的类型,那么您可以执行以下代码的等效操作。

  • 使用现有的DataSet作为TDataSetProvider的数据集来源,并使用TDataSetProvider作为Provider的{​​{1}}并使用{{1将数据提供给你的网格。

  • 请勿使用TClientDataSet和/或TClientDataSet,而是使用现有数据集执行类似于下面显示的内容,但请将“百分比”字段设为TClientDataSet字段如果您的DataSet类型支持它,或者如果不支持TAggregateField,则省略GrantTotal fkInternalCalc字段并在代码中计算GrandTotal。实现此目的的一种方法是在打开数据集(fkCalculated)后,通过仅进行一次遍历来计算它。

在下面的代码中,我已经在代码中创建了所有字段,而不是使用Object Inspector的字段编辑器,因此您可以轻松查看使TAggregateField工作所需的最低设置。

注意:我可能错了,但不认为您可以获得标准while not DataSet.Eof ...来显示屏幕截图的最终100%行。类似的东西可以使用Developer Express TAggregateField来完成,但是如果你需要一个TDBGrid来做这件事,你应该问一个新的问题。

代码

TDBGrid