我有dbgrid显示列小计和列百分比,如何显示此公式中的列百分比:(小计/大计)* 100%?详情请见下图
我无法修改我的SQL,因为我的SQL非常复杂,所以我认为解决方案可能使用计算字段,不是吗?有人可以帮我解决这个问题。 谢谢你提前。
答案 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