11

我有一个由对象 { groupName, rowName, colName, value } 组成的数据源。我正在尝试将字段 row,col,val 放在交叉表中,按组分隔 [该组有标题]。数据对象的集合被存储为主数据源。

当我尝试这样做时,我得到了错误:

net.sf.jasperreports.engine.JRRuntimeException: Error incrementing crosstab dataset
    net.sf.jasperreports.engine.fill.JRFillCrosstab$JRFillCrosstabDataset.customIncrement(JRFillCrosstab.java:762)
    net.sf.jasperreports.engine.fill.JRFillElementDataset.increment(JRFillElementDataset.java:193)
    net.sf.jasperreports.engine.fill.JRCalculator.calculateVariables(JRCalculator.java:162)
    net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:747)

有没有人对为什么会发生这种情况或如何解决它有建议?

4

2 回答 2

22

我发现以下可能会有所帮助:*

“Crosstab 数据已被处理”异常是什么意思?

如果在已呈现交叉表后将更多数据添加到交叉表数据集,则会引发此异常。
这通常发生在交叉表元素链接到报表的主数据集(不使用子数据集运行)并且交叉表数据集的 resetType 属性与呈现交叉表的位置不匹配时。
交叉表是显示聚合数据的特殊组件。当它们链接到报表的主数据集时,您根本无法将它们放在详细信息部分,因为没有数据可以从单个记录中聚合。
此类交叉表只能位于组页脚或报表的摘要部分,并具有适当的 resetType 值,因此每次呈现后都会初始化它们的数据集。
如果您仍然认为需要为主文档中的每个详细信息呈现一个交叉表,那么几乎可以肯定此交叉表应该链接到子数据集而不是报表的主数据集。

您必须尝试将所有数据放在详细信息部分,这将不允许交叉表组件聚合您的所有数据。

* jasperforge.org

于 2011-04-04T21:22:18.037 回答
1

将CrossTab 放在summery 部分并移除所有其他Band 以正确对齐CrossTab。我正在使用 jasperstudio,这种方法解决了这个问题。

于 2017-03-29T05:28:30.313 回答