でレポートを生成していDynamicJasper
ます。行が空白の場合、レポート行を削除したいです。JasperReports で行う方法を知っています。
DynamicJasper
しかし、Javaコードを使用して空白行を削除する方法を誰かに提案できますか?
でレポートを生成していDynamicJasper
ます。行が空白の場合、レポート行を削除したいです。JasperReports で行う方法を知っています。
DynamicJasper
しかし、Javaコードを使用して空白行を削除する方法を誰かに提案できますか?
の助けを借りてこの問題を解決するための簡単な方法を見つけられませんでしたDynamicJasper API
。
しかし、それはDJ
助けを借りて解決することができます。
これは、レポートを作成するためのメインクラスのソースコードです。
public class BasicReportTest {
private JasperPrint m_jasperPrint;
private JasperReport m_jasperReport;
private Map m_params = new HashMap();
private DynamicReport m_dynamicReport;
public DynamicReport buildReport() throws Exception {
Style detailStyle = new Style();
detailStyle.setBorder(Border.THIN);
detailStyle.setBlankWhenNull(true);
Style headerStyle = new Style();
headerStyle.setFont(Font.COURIER_NEW_BIG_BOLD);
headerStyle.setBorder(Border.THIN);
headerStyle.setHorizontalAlign(HorizontalAlign.CENTER);
headerStyle.setVerticalAlign(VerticalAlign.MIDDLE);
headerStyle.setFont(Font.ARIAL_BIG);
FastReportBuilder drb = new FastReportBuilder();
drb.addColumn("State", "state", String.class.getName(), 30, detailStyle, headerStyle)
.addColumn("Branch", "branch", String.class.getName(), 30, detailStyle, headerStyle)
.addColumn("Item", "item", String.class.getName(), 50, detailStyle, headerStyle)
.addColumn("Amount", "amount", Float.class.getName(), 60, detailStyle, headerStyle)
.setTitle("The report with empty rows")
.setUseFullPageWidth(true);
DynamicReport dr = drb.build();
return dr;
}
public void testReport() throws Exception {
m_dynamicReport = buildReport();
JRDataSource dataSource = getDataSource();
m_jasperReport = DynamicJasperHelper.generateJasperReport(m_dynamicReport,
getLayoutManager(), m_params);
m_jasperPrint = JasperFillManager.fillReport(m_jasperReport, m_params, dataSource);
exportReport();
}
protected LayoutManager getLayoutManager() {
return new CustomLayoutManager();
}
/*... Some code ... */
public static void main(String[] args) throws Exception {
BasicReportTest test = new BasicReportTest();
test.testReport();
}
}
このコード文字列により、で値を空白としてdetailStyle.setBlankWhenNull(true);
表示することができます。式を使うようなものですnull
textField
<textField isBlankWhenNull="true">
jrxml
ファイル内。
ただし、次のようなxmlコードを「生成」する必要もあります。
<textField isBlankWhenNull="true">
<reportElement ... isRemoveLineWhenBlank="true"/>
上で述べたように、には、 JRElement.setRemoveLineWhenBlank(boolean isRemoveLineWhenBlank)DJ
メソッドを呼び出すためのパブリックメソッド(ラッパー)が含まれていません。
そのため、カスタマイズされたLayoutManager
クラスを使用しました。サンプルでは、CustomLayoutManager
クラスです。
ソースコードは次のとおりです。
public class CustomLayoutManager extends ClassicLayoutManager {
@Override
protected void transformDetailBandTextField(AbstractColumn column, JRDesignTextField textField) {
super.transformDetailBandTextField(column, textField);
if (column.getStyle().isBlankWhenNull()) {
textField.setRemoveLineWhenBlank(true);
}
}
}
エンジンがバンドの構築に使用するメソッドtransformDetailBandTextField
をオーバーライドしました。DJ
Detail