0

サブレポート内にサブレポートを含める必要があるという要件があります。参照できるサンプルコードはありますか?

前もって感謝します。

4

1 に答える 1

3

サブレポート内でサブレポートを生成するために、実際にはコードはまったく必要ありません。これは、動的コンポーネントを持たない (詳細バンドに何もない) レポートで行うことができます。もちろん、結果として得られるレポートは、興味深いものにはあまり役に立ちません。

これよりも興味深いレポートが必要な場合は、レポートおよび/またはサブレポートにデータを提供する必要があります。その時点で、コードはデータの取得元によって異なります。あなたがやろうとしていることについてより多くの情報を提供していただければ、おそらくより多くの助けになるでしょう.

サブレポートに動的コンテンツがある場合は、JRDataSource を実装するオブジェクトへのアクセスをサブレポートに渡す必要があります。

たとえば、最近、複数の「条項」を含む 1 ページのレポートを作成しました。作業を簡素化するために、句を 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;
    }
}
于 2009-03-26T06:48:00.897 に答える