Как стереть строки в таблице, если выражение допустимо в iReport
у меня есть таблица в iReport с 3 полями (A, B, C). Я бы напечатал строку IFF поле C не равно null. Например, если у меня есть 2 записи в моем источнике данных:
а = во-первых, Б = во-вторых, с = третья
A = вверх, B = вниз, C = NULL
таблица должна иметь только первую строку.
Я попытался вставить это выражение в каждую ячейку (в "Print when expression" свойство):
!$F{C}.equals(null)
но таким образом получается, что вторая строка пуста (но видна).
Edit: после первого ответа (теперь стерты) столбцы в таблице что-то вроде:
<jr:column ...>
<jr:columnHeader ...>
<staticText>
<reportElement .../>
<text><![CDATA[ID]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell ...>
<textField isBlankWhenNull="false">
<reportElement ... isRemoveLineWhenBlank="true">
<printWhenExpression><![CDATA[$F{ID}!=null]]></printWhenExpression>
</reportElement>
<textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column ...>
<jr:columnHeader ...>
<staticText>
<reportElement .../>
<text><![CDATA[CITY]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell ...>
<textField isBlankWhenNull="false">
<reportElement ... isRemoveLineWhenBlank="true">
<printWhenExpression><![CDATA[$F{ID}!=null]]></printWhenExpression>
</reportElement>
<textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
источником данных является XML-файл. Я пробовал также с isBlankWhenNull="true"
но без изменений. Вот экран результата:
3 ответов
когда вы поместите выражение печати when в поле, будет удалено только поле. Следовательно, пространство останется. Поместите то же выражение на ленту detail и повторите попытку.
Edit:
глядя на проблему дальше, я заметил, что нет возможности опустить записи (печать при выражении) на уровне детализации элемента таблицы. Эта опция не существует, как вы можете видеть в iReport, а также в определение схемы. Более того, причина isBlankWhenNull="true"
не работает, потому что, хотя текстовое поле пусто, строка сведений по-прежнему занимает выделенную высоту. Кроме того, выражение PrintWhenExpression, которое вы пытались изменить, применяется ко всей таблице, а не к строке. Поэтому кажется, что это невозможно сделать так, как вы надеялись.
здесь я дам вам эти шаги, чтобы решить вашу проблему:
- обновить запрос XPath для бега свойство dataset (правый клик > изменить таблицу источник данных из представления конструктора таблиц), так что записи, где C равно null, опущены.
- выберите дополнительный набор данных и выберите "использовать выражение источника данных" в меню подключение / выражение источника данных.
- вставить следующее выражение:
((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/root[c!='']")
Удачи.
Я нашел другое решение этой проблемы: Для набора данных, используемого для таблицы, добавьте выражение фильтра, например $F{dateRemoved}==null.
таким образом, пустые строки будут удалены.
прямой ответ на проблему:
- после использования - > печать при выражении
перейдите всего на 1 дюйм выше и проверьте опцию "Удалить строку, когда пусто"
100% работающего