2010-06-26 67 views
3

我正在生成一个报告与DynamicJasper,我想删除一个报告行,当行是空白的。我知道如何在JasperReports中完成。DynamicJasper:如何删除行时空白

但任何人都可以建议我如何使用java代码通过DynamicJasper删除空白行。

+0

你能再细说一下吗? – 2010-06-26 10:46:18

+0

嘿Purushotham感谢重播。我有几行没有数据。我想删除它们。我如何使用动态Jasper删除它们? – jaxb 2010-06-26 13:11:07

回答

3

我还没有找到一个简单的方法来解决这个问题的帮助下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"> 

in jrxml file。

但是,我们也需要“生成” 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); 
     } 
    } 
} 

我overrided是DJ的引擎用于建设Detail带的方法transformDetailBandTextField

+0

工作就像一个魅力,亚历克斯。荣誉。 – inanutshellus 2014-06-05 03:46:04

+1

@Gabriel欢迎您:) – 2014-06-05 06:13:06