2010-06-26 2 views
3

Я создаю отчет с DynamicJasper, я хочу удалить строку отчета, когда строка пуста. Я знаю, как это сделать в JasperReports.DynamicJasper: как удалить строку, когда пустой

Но может ли кто-нибудь предложить мне, как удалить пустую строку через DynamicJasper с помощью кода Java.

+0

Можете ли вы уточнить немного больше? –

+0

Hey Purushotham благодарит за повторное воспроизведение. У меня несколько строк без данных. Я хочу их удалить. Как я могу удалить их с помощью Dynamic Jasper? – jaxb

ответ

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"> 

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); 
     } 
    } 
} 

Я перекрытый метод transformDetailBandTextField, который использует двигатель DJ «s для построения Detail группы.

+0

Работал как шарм, Алекс. Престижность. – inanutshellus

+1

@Gabriel Добро пожаловать :) –