【问题标题】:DynamicJasper: How to remove line when blankDynamicJasper:空白时如何删除行
【发布时间】:2010-06-26 10:38:32
【问题描述】:

我正在生成带有DynamicJasper 的报告,当行为空白时,我想删除报告行。我知道如何在 JasperReports 中进行操作。

但是谁能建议我如何使用 java 代码通过DynamicJasper 删除空白行。

【问题讨论】:

  • 你能详细说明一下吗?
  • 嘿 Purushotham 感谢重播。我有几行没有数据。我想删除它们。如何使用 Dynamic Jasper 删除它们?

标签: java jasper-reports dynamic-jasper


【解决方案1】:

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); 使我们能够在textField 中将null 值显示为空白。就像我们会使用表达式

<textField isBlankWhenNull="true">

jrxml 文件中。

但我们还需要像这样“生成”xml代码:

<textField isBlankWhenNull="true">
    <reportElement ... isRemoveLineWhenBlank="true"/>

正如我上面提到的,DJ 不包含任何用于调用JRElement.setRemoveLineWhenBlank(boolean isRemoveLineWhenBlank) 方法的公共方法(包装器)。

这就是我使用自定义 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);
        }
    }
}

我已经覆盖了 DJ 的引擎用于构建 Detail 波段的方法 transformDetailBandTextField

【讨论】:

  • 工作就像一个魅力,亚历克斯。荣誉。
猜你喜欢
  • 2012-08-14
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
相关资源
最近更新 更多