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

Java 如果子报表为空,则隐藏文本字段,java,jasper-reports,reporting,Java,Jasper Reports,Reporting,我正在Jasper中创建一个包含四个部分的报告。每个部分都包含一个文本字段作为标题和一个子报告。子报表可以为空。如果为空,则在为空时使用“删除行”将其隐藏。到目前为止,这是可行的。现在,如果子报表被隐藏,那么相应的标题文本字段也应该被隐藏 我试过很多方法,但都没有找到解决办法。 例如,在表达式:新建布尔值($P{otherField}.read()!=-1)时使用打印。这从来没有显示标题 我还试图在Java程序中隐藏头,但找不到合适的API命令。我想getBands()[x].getChildr

我正在Jasper中创建一个包含四个部分的报告。每个部分都包含一个文本字段作为标题和一个子报告。子报表可以为空。如果为空,则在为空时使用“删除行”将其隐藏。到目前为止,这是可行的。现在,如果子报表被隐藏,那么相应的标题文本字段也应该被隐藏

我试过很多方法,但都没有找到解决办法。 例如,在表达式:
新建布尔值($P{otherField}.read()!=-1)
时使用打印。这从来没有显示标题

我还试图在Java程序中隐藏头,但找不到合适的API命令。我想
getBands()[x].getChildren()[y]
会引导我找到正确的标题,但我无法将其隐藏在那里


还有其他想法吗?

您应该将标题文本放在子报告的内部,例如
标题

在子报表中


确保您没有
jasperReport
标记上的属性,因此它使用默认值
nopage

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

如果您在子报表之外需要它(出于某种奇怪的原因),请将子报表中的记录计数传递回主报表,并使用带有
printWheenexpression
evalutationTime=“report”

有关如何传回报告计数的更多详细信息,请查看此文件


谢谢你的帮助。我最终可以通过在标题中的“打印时使用表达式”下使用以下表达式来解决此问题:

($P{SUBR}!=null)
在哪里

$p{SUBR}


是子报表的表达式。

如果您有多个子报表的公共标题,并且需要显示/隐藏标题,则可能需要从子报表中计算报表计数,具体取决于是否有任何子报表包含数据或所有子报表均为空。所以这是有效的要求。不,对不起。不幸的是,我再也无法访问代码了。