2016-03-03 3 views
0

У меня есть отчет в яшмы, которые выглядят как:Как плавать текстовое поле, если условие не оставляет пустое пространство?

sub total: (text) XX (formula) 
disc: (text) xx (formula) 
disc2: (text) xx (formula) 
total: (text) xx (formula) 

Величина скидки disc и disc2 часто может быть равен нулю, и если да, то мне нужно показать это нравится:

sub total: (text) xx (formula) 
total: (text) xx (formula) 

Как я делаю в истребителе Джаспер?

report picture

Цель состоит в том, чтобы скрыть диск, то я и II линии, когда это значение 0, в результате чего общая линия всплывают, не выходя из пустого пространства.

Полный код jrxml: http://pastebin.com/Wuu82vJT

+1

Где ваша проблема? Можете ли вы разместить свой файл jrxml? – sanluck

+0

@Jackie Возможный дубликат [JasperReports/iReport Designer: Могу ли я показать группу условно] (http://stackoverflow.com/q/17524212/876298) & [Как выразить выражение для диапазона данных на основе возвращаемого значения из subreport той же группы] (http://stackoverflow.com/q/35293689/876298). Та же идея –

+0

@ Jackie этот вопрос все еще открыт? у вас все еще есть проблемы? –

ответ

1

Чтобы скрыть и удалитьreportElement по значению используйте printWhenExpression и isRemoveLineWhenBlank="true" (на всех TextFields, который должен быть удален)

Пример

<textField pattern="#,##0;-#,##0" isBlankWhenNull="false"> 
    <reportElement positionType="Float" x="453" y="22" width="97" height="16" isRemoveLineWhenBlank="true" uuid="e3279093-5beb-490a-9954-aad866ed208c"> 
     <printWhenExpression><![CDATA[$V{vdisc_1}!=null&&$V{vdisc_1}.equals(0)]]></printWhenExpression> 
    </reportElement> 
    <textElement textAlignment="Right" verticalAlignment="Top"> 
     <font size="9"/> 
    </textElement> 
    <textFieldExpression><![CDATA[$V{vdisc_1}]]></textFieldExpression> 
</textField> 

Сделать reportElement (общая строка) поплавок вверх, используйте positionType="Float" атрибута

Пример

<staticText> 
    <reportElement positionType="Float" x="372" y="56" width="80" height="16" uuid="6ba40473-9efb-42e3-8b49-0d2c32ba84bd"/> 
    <textElement> 
     <font size="9"/> 
    </textElement> 
    <text><![CDATA[Total (Rp)]]></text> 
</staticText> 

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

Самый простой способ достичь динамической высоты - переместить весь текст (в lastPageFooter) в подчиненный отчет (передайте данные, которые вам нужны, например, через параметры). Включите эту подотчет с минимальной высоты и установите его positionType="FixRelativeToBottom"

Пример

<subreport> 
    <reportElement positionType="FixRelativeToBottom" x="0" y="87" width="555" height="41" uuid="656195bf-74bc-4aa0-9f0a-9c3a00cc6fb2"/> 
    <subreportParameter name="vdisc_1"> 
     <subreportParameterExpression><![CDATA[$V{vdisc_1}]]></subreportParameterExpression> 
    </subreportParameter> 
    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource(1)]]></dataSourceExpression> 
    <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "example_subreport.jasper"]]></subreportExpression> 
</subreport> 
Смежные вопросы