如果子报表为空则隐藏文本字段

Hide text field if subreport is empty

我正在 Jasper 中创建一个包含四个部分的报告。每个部分都包含一个文本字段 header 和一个子报表。子报表可以为空。如果为空,则使用 Remove Line When Blank 隐藏它。到目前为止这有效。现在,如果子报表被隐藏,相应的 header 文本字段也应该被隐藏。

我尝试了很多方法,但无法找到解决方案。 例如。使用 Print When Expression: new Boolean ($P{otherField}.read() != -1)。这从未显示 header.

我也试图在我的 Java 程序中隐藏 header 但找不到合适的 API 命令。我想 getBands()[x].getChildren()[y] 带我到右边 header 但我不能把它藏在那里。

还有其他想法吗?

您应该将 header 文本 放在 子报表中,例如 title

在子报表中

<title>
    <band height="38">
        <textField>
            <reportElement x="10" y="0" width="100" height="20" uuid="4b8ece47-1608-4d08-bc0b-e6b73bcf8346"/>
            <textFieldExpression><![CDATA["TITLE"]]></textFieldExpression>
        </textField>
    </band>
</title>

确保 jasperReport 标签上没有 whenNoDataType 属性,因此它使用默认值 NoPages

如果子报表没有记录,属性 whenNoDataType=NoPages(默认)将确保不返回任何内容,您将看不到标题。

如果您在子报表之外需要它(出于某些奇怪的原因),将记录计数从子报表传回主报表并使用带有 printWhenExpressionevalutationTime="Report"

的文本字段

查看此链接以了解有关如何传回报告计数的更多详细信息。

How to get report_count from subreport in iReport

感谢您的帮助。我终于可以通过在 header 中的 "Print When Expression" 下使用以下表达式来解决它:

($P{SUBR}!=null)

其中

$P{SUBR}

是子报表的表达式。