2015-01-21 3 views
2

Я хочу напечатать содержание в ArrayList с помощью JasperReports в JavaРаспечатайте ArrayList содержания с JasperReports

На самом деле я мало знаю о Jasper Докладывает Я использую IReport для создания Japser отчетов и с помощью команды Java я буду распечатайте его.

Теперь я хочу напечатать результаты студента, используя JasperReports. Это моя таблица результатов.

Reg.No SubjectCode Level Semester Grade Marks 
8 CMIS 1113 1  1  A  77 
7 CMIS 1213 1  2  C  57 
122101 IMGT 2112 2  1  A  87 
122110 IMGT 2213 2  2  A  83 
112123 STAT 3113 3  1  C  55 
112135 MATH 3213 3  2  B  67 
132145 CMIS 1113 1  1  D  17 
122118 ELTN 2213 1  2  A  90 
112100 CMIS 3213 3  2  A  89 
112117 SATA 3113 1  1  A  87 
122104 CMIS 2213 2  2  C  54 
4 CMIS 1213 1  2  A  84 

Поэтому, согласно моей таблице выше, мне нужно напечатать «Результаты учащегося определенного уровня в конкретном семестре».
В моем интерфейсе у меня есть возможность выбрать уровень и семестр.
Затем соответствующий запрос сгенерирует автоматически и результаты будут получены из базы данных и с использованием объекта Results (я создаю класс под названием «Результаты» для хранения результатов конкретного учащегося). Я добавляю данные результатов в ArrayList.
Теперь у моего объекта ArrayList есть объекты Results, которые содержат результаты каждого учащегося определенного уровня и конкретного семестра. Теперь я хочу напечатать этот ArrayList с помощью отчета Jasper. Так ожидаемый отчет Jasper выглядит следующим образом.
Для Уровня 1 и Семестр 1

Reg.No CMIS1113 
8 A 
132145 D 


Для Уровня 2 и Семестр 2

Reg.No IMGT2213 CMIS2213 
122110 A   - 
122104 -   C 


Теперь у меня есть несколько проблем.

1) Обычно, что я делал ранее, когда я создаю шаблон Jasper с использованием iReport, я дал соответствующий запрос перед его созданием. Но здесь запрос будет изменен в соответствии с выбранным уровнем и семестром. Таким образом, результат будет изменен в соответствии с запросом . И заголовки столбцов также меняются, потому что темы меняются. (Количество предметов не одинаково в каждом семестре и на каждом уровне) Итак, мой вопрос: как создать общие шаблоны Jasper для обработки каждой ситуации? (Если возможно)

2) Как я печатаю ArrayList с помощью Java-кода. Я не знаю код Java для печати содержимого ArrayList с использованием отчета Jasper.

Я знаю очень мало о Jasper Reports.So, если вы можете мне помочь. Спасибо.

ответ

2

вы можете передать ArrayList для представления в качестве параметра. Затем в отчете создайте Subdataset с тем же именем и типом параметров (ArrayList). Затем создайте компонент таблицы. используйте ConnectionExpression:

new net.sf.jasperreports.engine.JREmptyDataSource($P{IN_ARRAY_LIST}.size()) 

Затем сопоставьте параметр отчета с параметром таблицы. Тогда в TextFields в компоненте таблицы вы можете использовать выражение так:

$P{IN_ARRAY_LIST}.get($V{REPORT_COUNT}) 

Убедитесь, что EvaluationTime свойство вашего TextFields установлен в настоящее.

UPD: Короткий демо-отчет, который показывает, как ArrayList источник работает:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="ArrayList" language="groovy" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="c67d12d3-80cd-46fb-8a79-5c4b0b7c76f9"> 
    <property name="ireport.zoom" value="1.0"/> 
    <property name="ireport.x" value="0"/> 
    <property name="ireport.y" value="0"/> 
    <subDataset name="TableDataset" uuid="628eb9fb-e4f0-4f6c-b5b3-277a14fda6e2"> 
     <parameter name="IN_ARRAY_LIST" class="java.util.ArrayList" isForPrompting="false"> 
      <defaultValueExpression><![CDATA[new java.util.ArrayList()]]></defaultValueExpression> 
     </parameter> 
     <variable name="ROW_INDEX" class="java.lang.Integer" resetType="None"> 
      <variableExpression><![CDATA[$V{REPORT_COUNT} - 1]]></variableExpression> 
     </variable> 
    </subDataset> 
    <!-- WHEN YOU CALL YOUR REPORT FROM JAVA, YOU SHOULD PUT YOUR ArrayList into IN_ARRAY_LIST PARAM--> 
    <parameter name="IN_ARRAY_LIST" class="java.util.ArrayList" isForPrompting="false"> 
     <defaultValueExpression><![CDATA[new java.util.ArrayList()]]></defaultValueExpression> 
    </parameter> 
    <queryString> 
     <![CDATA[]]> 
    </queryString> 
    <title> 
     <band height="20" splitType="Stretch"> 
      <staticText> 
       <reportElement x="0" y="0" width="555" height="20" uuid="d4548efc-5711-42b3-b08a-cb138c5d55cf"> 
        <!-- THIS IS FOR DEMO ONLY - I PUT 2 ROWS INTO ARRAY LIST USING PrintWhenExpression --> 
        <printWhenExpression><![CDATA[$P{IN_ARRAY_LIST}.add("ROW_1") && $P{IN_ARRAY_LIST}.add("ROW_2")]]></printWhenExpression> 
       </reportElement> 
       <text><![CDATA[Report Title]]></text> 
      </staticText> 
     </band> 
    </title> 
    <pageHeader> 
     <band height="20" splitType="Stretch"/> 
    </pageHeader> 
    <pageFooter> 
     <band height="20" splitType="Stretch"/> 
    </pageFooter> 
    <summary> 
     <band height="50" splitType="Stretch"> 
      <componentElement> 
       <reportElement key="table" x="0" y="0" width="555" height="50" uuid="042cdee2-a56a-49af-8a1b-740825446ed5"/> 
       <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd"> 
        <datasetRun subDataset="TableDataset" uuid="6f17f8a5-0bcc-4e2a-a900-cdb1e1261d24"> 
         <datasetParameter name="IN_ARRAY_LIST"> 
          <datasetParameterExpression><![CDATA[$P{IN_ARRAY_LIST}]]></datasetParameterExpression> 
         </datasetParameter> 
         <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource($P{IN_ARRAY_LIST}.size())]]></dataSourceExpression> 
        </datasetRun> 
        <jr:column width="555" uuid="236aa389-6073-48fa-9b0f-02dcec80551e"> 
         <jr:columnHeader height="30" rowSpan="1"> 
          <staticText> 
           <reportElement x="0" y="0" width="555" height="30" uuid="18d3f3cc-13fa-4203-b239-45739b1839dc"/> 
           <text><![CDATA[ArrayList Field Value]]></text> 
          </staticText> 
         </jr:columnHeader> 
         <jr:detailCell height="20" rowSpan="1"> 
          <textField> 
           <reportElement x="0" y="0" width="555" height="20" uuid="a5bd535e-091b-4eef-a0af-e70fc7d2cce2"/> 
           <textFieldExpression><![CDATA[$P{IN_ARRAY_LIST}.get($V{ROW_INDEX})]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
       </jr:table> 
      </componentElement> 
     </band> 
    </summary> 
</jasperReport> 

Я надеюсь, что теперь это ясно.

+0

Спасибо, сэр. Но ваше описание мне не ясно. Можете ли вы дать мне полный код? Если это так, было бы очень полезно. – Punuth

+0

Только что обновил ответ. пожалуйста, дайте мне знать, если это ясно. – mike

Смежные вопросы