Как стереть строки в таблице, если выражение допустимо в iReport

у меня есть таблица в iReport с 3 полями (A, B, C). Я бы напечатал строку IFF поле C не равно null. Например, если у меня есть 2 записи в моем источнике данных:

  1. а = во-первых, Б = во-вторых, с = третья

  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" но без изменений. Вот экран результата: tab

3 ответов


когда вы поместите выражение печати when в поле, будет удалено только поле. Следовательно, пространство останется. Поместите то же выражение на ленту detail и повторите попытку.

Edit:

глядя на проблему дальше, я заметил, что нет возможности опустить записи (печать при выражении) на уровне детализации элемента таблицы. Эта опция не существует, как вы можете видеть в iReport, а также в определение схемы. Более того, причина isBlankWhenNull="true" не работает, потому что, хотя текстовое поле пусто, строка сведений по-прежнему занимает выделенную высоту. Кроме того, выражение PrintWhenExpression, которое вы пытались изменить, применяется ко всей таблице, а не к строке. Поэтому кажется, что это невозможно сделать так, как вы надеялись.

здесь я дам вам эти шаги, чтобы решить вашу проблему:

  1. обновить запрос XPath для бега свойство dataset (правый клик > изменить таблицу источник данных из представления конструктора таблиц), так что записи, где C равно null, опущены.
  2. выберите дополнительный набор данных и выберите "использовать выражение источника данных" в меню подключение / выражение источника данных.
  3. вставить следующее выражение:

((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/root[c!='']")

Удачи.


Я нашел другое решение этой проблемы: Для набора данных, используемого для таблицы, добавьте выражение фильтра, например $F{dateRemoved}==null.

таким образом, пустые строки будут удалены.


прямой ответ на проблему:

  1. после использования - > печать при выражении
  2. перейдите всего на 1 дюйм выше и проверьте опцию "Удалить строку, когда пусто"

  3. 100% работающего