Табличный инструмент для отображения на меньшее количество записей базы данных - PullRequest
2 голосов
/ 18 мая 2011

Основная проблема в том, что мой запрос работает нормально в SQL, а также в предварительном просмотре запроса набора данных таблицы.я имею в виду в предварительном просмотре данных запроса набора данных таблицы, он отображает 2 записи из моей таблицы базы данных.

, пожалуйста, найдите снимок экрана enter image description here.

также найти файл Jrxml.

<?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="report2" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <style name="table">
        <box>
            <pen lineWidth="1.0" lineColor="#000000"/>
        </box>
    </style>
    <style name="table_TH" mode="Opaque" backcolor="#F0F8FF">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
        </box>
    </style>
    <style name="table_CH" mode="Opaque" backcolor="#BFE1FF">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
        </box>
    </style>
    <style name="table_TD" mode="Opaque" backcolor="#FFFFFF">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
        </box>
    </style>
    <subDataset name="Table Dataset 1">
        <queryString>
            <![CDATA[select lname, fname from test1
order by fname]]>
        </queryString>
        <field name="lname" class="java.lang.String"/>
        <field name="fname" class="java.lang.String"/>
    </subDataset>
    <subDataset name="New Dataset 1">
        <queryString language="SQL">
            <![CDATA[select lname, fname from test1
order by fname]]>
        </queryString>
        <field name="lname" class="java.lang.String"/>
        <field name="fname" class="java.lang.String"/>
    </subDataset>
    <queryString>
        <![CDATA[select lname, fname from test1
order by fname]]>
    </queryString>
    <field name="lname" class="java.lang.String"/>
    <field name="fname" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch"/>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="61" splitType="Stretch">
            <staticText>
                <reportElement x="100" y="41" width="102" height="20"/>
                <textElement/>
                <text><![CDATA[lname]]></text>
            </staticText>
            <staticText>
                <reportElement x="202" y="41" width="147" height="20"/>
                <textElement/>
                <text><![CDATA[fname]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="125" splitType="Stretch">
            <componentElement>
                <reportElement key="table" style="table" x="100" y="0" width="360" height="86"/>
                <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="Table Dataset 1">
                        <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                    </datasetRun>
                    <jr:column width="90">
                        <jr:detailCell style="table_TD" height="20" rowSpan="1">
                            <textField>
                                <reportElement x="0" y="0" width="90" height="20"/>
                                <textElement/>
                                <textFieldExpression class="java.lang.String"><![CDATA[$F{lname}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column width="90">
                        <jr:detailCell style="table_TD" height="20" rowSpan="1">
                            <textField>
                                <reportElement x="0" y="0" width="90" height="20"/>
                                <textElement/>
                                <textFieldExpression class="java.lang.String"><![CDATA[$F{fname}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                </jr:table>
            </componentElement>
        </band>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

, но вывод в отчете pdf - только 1 запись, которая является последней 1. enter image description here

Ответы [ 3 ]

3 голосов
/ 08 декабря 2011

Это происходит со мной при использовании JRBeanCollectionDataSource. Я точно знаю, что все данные есть, но инструмент таблицы по-прежнему пропускает первую строку. Похоже, что основной отчет выполняет «.next ()» в коллекции или что-то, после чего вложенный отчет (таблица a.k.a) продолжает работать с остальными данными

В любом случае, я решил, передав $ P {REPORT_DATA_SOURCE} .cloneDataSource () в качестве выражения dataSource таблицы. Тогда, похоже, таблица начинается с нового источника данных и может перебирать все элементы, и это работает. Я не знаю, какой источник данных вы используете, но вам нужно найти способ переместить курсор в начало ваших данных, прежде чем использовать подотчет.

Итак, подводя итог, я сделал это в своем файле jrxml: <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}.cloneDataSource()]]></dataSourceExpression>

но только потому, что я использую JRBeanCollectionDataSource

1 голос
/ 01 января 2014

Точно такая же проблема, как у kawda, и точно такое же поведение, что и у пользователя1972796: несколько таблиц вместо одной, но правильное количество строк в одной таблице.

Проблема возникает, когда в основном отчете ничего не повторяется, а вложенный отчет помещен в полосу сведений и ссылается на источник основных данных через $ P {REPORT_DATA_SOURCE}

Объяснение (и решение) выглядит так: http://community.jaspersoft.com/wiki/why-first-record-missing-my-subreport

0 голосов
/ 26 августа 2011

Может быть, вы должны использовать <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> вместо <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>

...