Охват ячеек iReport в табличном компоненте

Я использую iReport для отображения данных из net.sf.jasperreports.engine.data.JRTableModelDataSource в таблице. Я использую TableModelDataSource, потому что мне приходится использовать Java в качестве источника данных.

Теперь я получил следующий код, который работает нормально:

<?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="controltest" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <property name="ireport.zoom" value="1.3310000000000022"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="276"/>
    <property name="ireport.callouts" value="##Wed Dec 05 08:22:05 CET 2012"/>
    <subDataset name="plantsResultTable">
        <field name="COLUMN_0" class="java.lang.String"/>
        <field name="COLUMN_1" class="java.lang.String"/>
        <field name="COLUMN_2" class="java.lang.String"/>
        <field name="COLUMN_3" class="java.lang.String"/>
        <field name="COLUMN_4" class="java.lang.String"/>
        <field name="COLUMN_5" class="java.lang.String"/>
        <field name="readActualSupply" class="java.lang.String"/>
        <group name="supplyGroup">
            <groupExpression><![CDATA[$F{readActualSupply}]]></groupExpression>
        </group>
    </subDataset>
    <field name="remotelyControlledSupply" class="java.lang.String"/>
    <field name="thirdPartyAccess" class="java.lang.String"/>
    <field name="plantsResultTable" class="net.sf.jasperreports.engine.JRDataSource"/>
    <background>
        <band/>
    </background>
    <pageHeader>
        <band/>
    </pageHeader>
    <detail>
        <band height="675">
            <frame>
                <reportElement x="0" y="250" width="555" height="239"/>
                <componentElement>
                    <reportElement key="table 2" x="0" y="17" width="555" height="222"/>
                    <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="plantsResultTable">
                            <dataSourceExpression><![CDATA[$F{plantsResultTable}]]></dataSourceExpression>
                        </datasetRun>
                        <jr:column width="90">
                            <jr:columnHeader height="30">
                                <staticText>
                                    <reportElement x="0" y="0" width="90" height="30"/>
                                    <textElement/>
                                    <text><![CDATA[COLUMN_0]]></text>
                                </staticText>
                            </jr:columnHeader>
                            <jr:detailCell height="20">
                                <textField pattern="">
                                    <reportElement x="0" y="0" width="90" height="20">
                                        <printWhenExpression><![CDATA[$V{supplyGroup_COUNT} == 1]]></printWhenExpression>
                                    </reportElement>
                                    <textElement/>
                                    <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_0}]]></textFieldExpression>
                                </textField>
                            </jr:detailCell>
                        </jr:column>
                        <jr:column width="90">
                            <jr:columnHeader height="30">
                                <staticText>
                                    <reportElement x="0" y="0" width="90" height="30"/>
                                    <textElement/>
                                    <text><![CDATA[COLUMN_1]]></text>
                                </staticText>
                            </jr:columnHeader>
                            <jr:detailCell height="20">
                                <textField>
                                    <reportElement x="0" y="0" width="90" height="20"/>
                                    <textElement/>
                                    <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_1}]]></textFieldExpression>
                                </textField>
                            </jr:detailCell>
                        </jr:column>
                        <jr:column width="90">
                            <jr:columnHeader height="30">
                                <staticText>
                                    <reportElement x="0" y="0" width="90" height="30"/>
                                    <textElement/>
                                    <text><![CDATA[COLUMN_2]]></text>
                                </staticText>
                            </jr:columnHeader>
                            <jr:detailCell height="20">
                                <textField>
                                    <reportElement x="0" y="0" width="90" height="20"/>
                                    <textElement/>
                                    <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_2}]]></textFieldExpression>
                                </textField>
                            </jr:detailCell>
                        </jr:column>
                        <jr:column width="90">
                            <jr:columnHeader height="30">
                                <staticText>
                                    <reportElement x="0" y="0" width="90" height="30"/>
                                    <textElement/>
                                    <text><![CDATA[COLUMN_3]]></text>
                                </staticText>
                            </jr:columnHeader>
                            <jr:detailCell height="20">
                                <textField>
                                    <reportElement x="0" y="0" width="90" height="20"/>
                                    <textElement/>
                                    <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_3}]]></textFieldExpression>
                                </textField>
                            </jr:detailCell>
                        </jr:column>
                        <jr:column width="90">
                            <jr:columnHeader height="30">
                                <staticText>
                                    <reportElement x="0" y="0" width="90" height="30"/>
                                    <textElement/>
                                    <text><![CDATA[COLUMN_4]]></text>
                                </staticText>
                            </jr:columnHeader>
                            <jr:detailCell height="20">
                                <textField>
                                    <reportElement x="0" y="0" width="90" height="20"/>
                                    <textElement/>
                                    <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_4}]]></textFieldExpression>
                                </textField>
                            </jr:detailCell>
                        </jr:column>
                        <jr:column width="90">
                            <jr:columnHeader height="30">
                                <staticText>
                                    <reportElement x="0" y="0" width="90" height="30"/>
                                    <textElement/>
                                    <text><![CDATA[COLUMN_5]]></text>
                                </staticText>
                            </jr:columnHeader>
                            <jr:detailCell height="20">
                                <textField>
                                    <reportElement x="0" y="0" width="90" height="20"/>
                                    <textElement/>
                                    <textFieldExpression class="java.lang.String"><![CDATA[$F{COLUMN_5}]]></textFieldExpression>
                                </textField>
                            </jr:detailCell>
                        </jr:column>
                    </jr:table>
                </componentElement>
            </frame>
        </band>
    </detail>
    <columnFooter>
        <band/>
    </columnFooter>
    <pageFooter>
        <band/>
    </pageFooter>
    <summary>
        <band/>
    </summary>
</jasperReport>

Что мне нужно знать сейчас, так это

  1. Есть ли способ центрировать значение COLUMN_0 по вертикали (установите вертикальное выравнивание на «центр»). Я предполагаю, что это должно идти что-то вроде if $V{supplyGroup_COUNT} == $V{supplyGroup_SIZE}/2. У меня есть таблица, показанная под «фактической», но я хочу, чтобы она динамически выглядела как «целевая». вертикальное выравнивание
  2. Есть ли способ напечатать другое значение COLUMN_0, если в таблице есть разрыв страницы. То есть таблица начинается на странице 1 и заканчивается на странице 2. Могу ли я напечатать значение COLUMN_0 на странице 1 и на странице 2? Я помещаю <printWhenExpression><![CDATA[$V{supplyGroup_COUNT} == 1 || $P{hasPageBreak}.equals("1"))]]></printWhenExpression> в текстовое поле моей таблицы, но компилятор жалуется, что не может найти параметр hasPageBreak. На данный момент я просто подсчитываю элементы в своей таблице и помещаю другой «текст», видимый, если $V{supplyGroup_COUNT} == 20 и если есть новая страница.

repeat value after break3. Есть ли способ заставить таблицу разбиваться после определенного количества элементов? У меня есть текст, который следует за таблицей. Я хотел бы всегда иметь хотя бы часть (конец) таблицы вместе со следующим текстом. Или мне нужно использовать две отдельные таблицы?

разделение таблицы


person Torsten    schedule 06.12.2012    source источник
comment
Is there a way to center the COLUMN_0 value - Что ты имеешь в виду?   -  person Alex K    schedule 06.12.2012
comment
@AlexK Я отредактировал свой пост. Я имел в виду вертикальное выравнивание значения COLUMN_0. В своем решении для вопроса user1264222 вы использовали выражение $V{supplyGroup_COUNT} == 1, поэтому значение записывается в первой ячейке. Я хотел бы отобразить его в центре.   -  person Torsten    schedule 07.12.2012
comment
Другими словами, вы хотите применить стиль (вертикальное выравнивание) к полю в некоторых случаях (условный стиль). Я прав?   -  person Alex K    schedule 07.12.2012
comment
@AlexK Да, я добавил несколько изображений, чтобы проиллюстрировать свой вопрос.   -  person Torsten    schedule 07.12.2012


Ответы (1)


1) Да, вы можете выровнять содержимое ячеек таблицы по вертикали

<textElement verticalAlignment="Middle"/>

я использую стиль

<style name="table_TD" vAlign="Middle" />

Я не уверен в двух других (вклад приветствуется)

2) isReprintHeaderOnEachPage работает для заголовков групп, но я не уверен в таблицах? (Я часто использую урезанный подотчет вместо таблицы.)

3) Split Type на полосе может помочь но если «какой-то текст» является отдельным объектом, я не верю, что вы можете предотвратить его осиротение

надеюсь, это поможет

person Community    schedule 09.01.2013