如果子报表为空则隐藏文本字段
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
(默认)将确保不返回任何内容,您将看不到标题。
如果您在子报表之外需要它(出于某些奇怪的原因),将记录计数从子报表传回主报表并使用带有 printWhenExpression
和 evalutationTime="Report"
的文本字段
查看此链接以了解有关如何传回报告计数的更多详细信息。
感谢您的帮助。我终于可以通过在 header 中的 "Print When Expression" 下使用以下表达式来解决它:
($P{SUBR}!=null)
其中
$P{SUBR}
是子报表的表达式。
我正在 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
(默认)将确保不返回任何内容,您将看不到标题。
如果您在子报表之外需要它(出于某些奇怪的原因),将记录计数从子报表传回主报表并使用带有 printWhenExpression
和 evalutationTime="Report"
查看此链接以了解有关如何传回报告计数的更多详细信息。
感谢您的帮助。我终于可以通过在 header 中的 "Print When Expression" 下使用以下表达式来解决它:
($P{SUBR}!=null)
其中
$P{SUBR}
是子报表的表达式。