如何在JasperReports / iReport中使用相同的数据源两次

时间:2011-09-28 01:32:02

标签: jasper-reports ireport

我正在尝试弄清楚如何最好地使用图表来报告,然后是表示相同数据集的表。我需要克服摘要的定位在底部,所以打算使用子报表和table-subreports。我正在一个细节范围内试验两张桌子和一张图表。

如果我将datasourceexpression设置为$P{REPORT_DATA_SOURCE},则只有图表显示数据(可能是第一个子报表类型项),表格为空。似乎数据只能被消费一次?

如果我使用数据集来查询数据库,它可以运行三次查询,每个表/图表执行一次。这将是一个巨大的开销。

显然我没有这样做,但我找不到任何一次使用同一数据集的例子。

2 个答案:

答案 0 :(得分:3)

没有简单的答案,所以我提出了一个功能请求http://jasperforge.org/projects/jasperreports/tracker/view.php?id=5487

建议的解决方法是:

  • 实现自定义查询执行程序以从缓存的数据源检索数据
  • 根据检索到的结果集生成可重绕的数据源

感谢jasperforge论坛上的sanda aka shertage提出这些建议。

答案 1 :(得分:0)

另一种解决方案,克隆数据集:

http://code.google.com/p/cloning/

Cloner cloner = new Cloner();

ArrayList clone = cloner.deepClone(getSomeArrayList());

final JRDataSource ds = new JRBeanCollectionDataSource(AnotherBean);

HashMap parameters = new HashMap();

parameters.put(“PARAM_A”,new JRBeanCollectionDataSource(getSomeArrayList()));

parameters.put(“PARAM_B”,new JRBeanCollectionDataSource(clone));