7

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

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

  2. A = 向上,B = 向下,C = NULL

该表必须只有第一行。

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

!$F{C}.equals(null)

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

编辑:在第一个答案(现在已删除)之后,表中的列类似于:

<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"但没有改变。这是结果的屏幕: 标签

4

3 回答 3

1

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

编辑:

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

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

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

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

祝你好运。

于 2012-05-25T07:33:38.040 回答
1

我找到了另一个解决这个问题的方法:对于用于表的数据集,添加过滤器表达式,例如 $F{dateRemoved}==null。

这样,空行将被删除。

于 2013-07-17T14:35:23.343 回答
0

直接回答问题:

  1. 使用后 -> Print When Expression
  2. 仅高出 1 英寸并选中“空白时删除线”选项

  3. 100% 工作

于 2018-03-28T12:27:25.673 回答