【问题标题】:How to use the same datasource twice in JasperReports/iReport如何在 JasperReports/iReport 中使用相同的数据源两次
【发布时间】:2011-09-28 01:32:01
【问题描述】:

我正在尝试找出如何最好地使用图表和代表相同数据集的表格来制作报告。我需要克服summary的定位是在底部,所以打算使用subreports和table-subreports。我正在一个详细信息带中试验两张表格和一张图表。

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

如果我使用 Dataset 来查询数据库,它可以工作,但是它会执行 Query 三次,每个表/图表一次。这将是一笔巨大的开销。

显然我做的不对,但我找不到任何多次使用同一数据集的示例。

【问题讨论】:

    标签: jasper-reports ireport


    【解决方案1】:

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

    建议的解决方法是:

    • 实现自定义查询执行器以从缓存数据源中检索数据
    • 根据检索到的结果集生成可回退的数据源

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

    【讨论】:

    【解决方案2】:

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

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

    克隆机 cloner=new Cloner();

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

    final JRDataSource ds = new JRBeanCollectionDataSource(AnotherBean);

    HashMap 参数 = new HashMap();

    parameters.put("PARAM_A", new JRBeanCollectionDataSource(getSomeArrayList()));

    parameters.put("PARAM_B", new JRBeanCollectionDataSource(clone));

    【讨论】:

    • 我认为这不是一个好的解决方案。但是您不需要克隆 ArrayList 本身。只需传递像parameters.put("PARAM_C", new JRBeanCollectionDataSource(getSomeArrayList())); 这样的相同对象就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多