【问题标题】:Subreports within a subreport (IReport-JasperReports)子报表中的子报表 (IReport-JasperReports)
【发布时间】:2010-10-14 17:38:29
【问题描述】:

我有一个需要在子报表中包含子报表的要求。有没有可以参考的示例代码?

提前致谢。

【问题讨论】:

    标签: jasper-reports ireport


    【解决方案1】:

    您实际上根本不需要任何代码来在子报表中生成子报表。这可以通过没有动态组件(详细信息带中没有)的报告来完成。当然,生成的报告不会对任何有趣的事情有太大用处。

    如果您想要一个比这更有趣的报告,您需要为报告和/或子报告提供数据。届时,代码将根据您的数据来自何处而有所不同。如果您能提供更多关于您正在尝试做的事情的信息,我们或许可以提供更多帮助。

    如果子报表具有动态内容,则需要将访问权传递给它,以访问实现 JRDataSource 的对象。

    例如,我最近创建了一个单页报告,其中包含多个“子句”。为了让我的生活更简单,我将子句存储在 Map 中,并使用以下代码派生 JRDataSource 对象。然后将 JRDataSource 对象作为主报告的字段传入。

    private static class ListMapDataSource implements JRRewindableDataSource {
    
        private Map currentMap = null;
        private int currentRow;
        private int numberOfMoveFirsts = 0;
        private List<Map<String, ? extends Object>> rowList;
    
        ListMapDataSource(List<Map<String, ? extends Object>> rowList) {
            this.rowList = rowList;
            moveFirst();
        }
    
        ListMapDataSource(Map<String, ? extends Object> singleRow) {
            this.rowList = new ArrayList<Map<String, ? extends Object>>(1);
            this.rowList.add(singleRow);
            moveFirst();
        }
    
        public boolean next() throws JRException {
            if (currentRow >= rowList.size() - 1) {
                return false;
            }
    
            currentRow++;
            currentMap = rowList.get(currentRow);
    
            return true;
        }
    
        public Object getFieldValue(JRField jrField) throws JRException {
            String name = jrField.getName();
            Class valueClass = jrField.getValueClass();
    
            if (JasperReport.class.isAssignableFrom(valueClass)) {
            }
    
            return currentMap.get(name);
        }
    
        public void moveFirst() {
            numberOfMoveFirsts++;
    
            if (numberOfMoveFirsts > 10) {
                System.out.println("Exceeded 10 moveFirst() calls.  Aborting.");
                System.exit(1);
            }
    
            currentRow = - 1;
            currentMap = null;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-03
      • 2013-11-11
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      相关资源
      最近更新 更多