2012-03-13 5 views
2

Я теряю много волос, пытаясь научиться использовать отчеты Джаспера. По сути, у меня есть около пяти java.util.List объектов, каждый набранный на другой тип данных, который представляет мои данные:Несколько разделов в одном отчете

public class Person { 

    private int id; 

    private String firstName; 

    private String lastName; 

    private int age; 

    // accessors/mutators omitted for brevity 
} 

public class Place { 

    private int id; 

    private String name; 

    private String type; 

    private String state; 

    // accessors/mutators omitted for brevity 
} 

public class Thing { 

    private int id; 

    private String name; 

    private int rating; 

    // accessors/mutators omitted for brevity 
} 

Я просто хотел бы показать мои данные в таблицах примерно так:

a

Кажется, что отчеты Jasper действительно предназначены только для работы с одним источником данных, к сожалению. Я пытался понять это на некоторое время, и я ударил стену. Как я могу иметь несколько источников данных и таблицы, представляющие упомянутые источники данных внутри отчета Jasper *.jrxml?

+0

Вы можете прочитать ответ на GenericJon на [этот вопрос] (http://stackoverflow.com/q/7482412/876298) –

ответ

2

Что вы можете сделать, это использовать вложенные отчеты. Создайте главный отчет с нужной секцией заголовка. В главном отчете вы создадите три параметра, которые являются JRDatasources, по одному для каждого отчета. Затем вы создаете каждый подзаголовок для каждой из таблиц, которые вы хотите.

Затем вы добавляете каждый в качестве отчета в основной отчет, вам, возможно, придется поиграть с ним, но с верхней части головы я думаю, что лучшее место для размещения - это, вероятно, резюме. При использовании ireport вам будет предложено передать параметр в качестве источника данных для подрепортажа.

В идеале был бы способ привязать параметр к подробному разделу, так как в iReport теперь вы можете иметь несколько разделов подробно. К сожалению, я не нашел способа сделать это, если кто-нибудь знает способ, пожалуйста, уменьшите и добавьте ответ.

Хотя есть второй вариант, где вы можете создать свой собственный источник данных и несколько разделов подробностей в одном отчете. По сути, вы в конечном итоге создаете новый объект, который объединяет их всех в один, и ... никогда не думает, что это ужасная идея.

+0

Как обернуть мой 'list' в источнике данных в шаблоне JRXML ? Также, как объявить параметр? Я уже ничего не смутил, так как начал изучать эту библиотеку. –

+0

Я хочу отметить, что добавление суб-отчета в группе «Заголовок страницы» может вызвать некоторые проблемы, если в суб-отчете на самом деле было более одной страницы. Больше подходит «Деталь» или «Сводка». –

+1

@TKKocheran> Я думаю, вам нужно [JRBeanCollectionDataSource] (http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/data/JRBeanCollectionDataSource.html). Для каждого суб-отчета вам необходимо предоставить ему источник данных, который может быть параметром вашего основного отчета. –

1

Я сделал это со списком элементов отчетов яшмы и передал источник данных в качестве параметра отчета. Обязательно поместите список в группу, которая может расти, иначе ваш контент может быть усечен.

  <componentElement> 
       <reportElement x="0" y="321" width="442" height="13" isRemoveLineWhenBlank="true"/> 
       <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical"> 
        <datasetRun subDataset="produkt"> 
         <dataSourceExpression><![CDATA[$P{produkteDataSource}]]></dataSourceExpression> 
        </datasetRun> 
        <jr:listContents height="13" width="442"> 
         <!-- Content goes here --> 
        </jr:listContents> 
       </jr:list> 
      </componentElement> 
Смежные вопросы