2010-06-26 97 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