1

メイン レポートからサブレポートにデータソースを渡したい。

したがって、iReportのConnection TypeUse a datasource expressionに変更し、 REPORT_DATA_SOURCEパラメータを渡すだけです。

レポートは数百のサイトを生成するはずです。また、ページごとに 1 つのサブレポートを計算します。

サブレポートにはデータソースの数行しか必要ないため、クエリで独自の WHERE を使用します。

問題は:

Connection TypeConnection から Data Sourceに変更すると、レポートには最初のサイトのみが表示されます。サブレポートは、メインレポートのデータセットをそのWHEREステートメントで 1 行だけに変更するように見えます。

そのhttp://www.billmann.de/2011/12/01/jasperreports-subreport-datasource/の解決策を見てきました が、これを試すとエラーが発生します:

java.lang.ClassCastException: net.sf.jasperreports.engine.JRResultSetDataSource を net.sf.jasperreports.engine.data.JRBeanCollectionDataSource にキャストできません

データソースをクローンする他の可能性はありますか? または、データソースが変更されないように、サブレポートで何かを設定できますか?

DataSourceの代わりにConnectionを使用すると、レポートは機能しますが、Subreport 呼び出しごとに独自のデータセットが生成されるため、5 分以上レンダリングされます。

4

1 に答える 1

2

私は上記のブログ エントリの作成者です。使用するデータ ソースは JRBeanCollectionDataSource であり、この JRDatasSurce は cloneDataSource() メソッドをサポートするため、JRBeanCollectionDataSource への型キャストが必要です。

すべての JRDataSource がそのようなメソッドをサポートしているわけではありません。プログラムでデータベースを読み込み、JRMapArrayDataSource などの別の JRDataSource にデータを入力する機会がある場合は、cloneDataSource() メソッドを使用できます。

このソリューションが追加の where 句で機能するかどうかはわかりません。

于 2012-08-29T15:30:43.493 に答える