如果表达式在iReport中有效,如何擦除表中的行

Bad*_*uel 6 pdf-generation jasper-reports ireport

我在iReport中有一个包含3个字段(A,B,C)的表.我想打印行iff字段C不为空.例如,如果我的数据源中有2条记录:

  1. A =第一,B =第二,C =第三

  2. A = up,B = down,C = NULL

该表必须只有第一行.

我尝试在每个单元格中插入此表达式(在"表达时打印"属性中):

!$F{C}.equals(null)
Run Code Online (Sandbox Code Playgroud)

但是这样结果是第二行是空的(但是可见).

编辑:在第一个答案(现在已删除)之后,表格中的列如下所示:

<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>
Run Code Online (Sandbox Code Playgroud)

数据源是xml文件.我也试过isBlankWhenNull="true"但没有改变.这里有一个结果屏幕: 标签

use*_*279 1

当您将 print when 表达式放在字段上时,只有该字段将被删除。因此,空间将保留。在细节带上放置相同的表达式,然后重试。

编辑:

进一步观察这个问题,我注意到在表元素的详细级别没有省略记录(打印表达式)的选项。正如您在 iReport 和架构定义中看到的那样,该选项不存在。isBlankWhenNull="true"此外,不起作用的原因是,即使文本字段为空,详细信息行仍然占用分配的高度。此外,您尝试修改的 PrintWhenExpression 应用于整个表而不是行。因此,似乎不可能按照您希望的方式进行。

在这里,我将向您提供以下步骤来解决您的问题:

  1. 将 XPath 查询更新为数据集运行属性(右键单击 > 从表设计器视图编辑表数据源),以便省略 C 为 null 的记录。
  2. 选择您的子数据集,然后从“连接/数据源表达式”菜单中选择“使用数据源表达式”。
  3. 插入以下表达式:

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

祝你好运。