首页 文章

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

提问于
浏览
4

我在 Jasper 中创建了一个包含四个部分的报告 . 每个部分都包含一个文本字段作为 Headers 和一个子报表 . 子报表可以为空 . 如果它为空,则使用“删除行空白时隐藏” . 到目前为止这个工作 . 现在,如果隐藏子报表,也应隐藏相应的 Headers 文本字段 .

我尝试了很多东西,但无法提出解决方案 . 例如 . 表达时使用打印: new Boolean ($P{otherField}.read() != -1) . 这从未显示过 Headers .

我也试图在我的Java程序中隐藏 Headers ,但找不到合适的API命令 . 我猜 getBands()[x].getChildren()[y] 引导我到正确的 Headers ,但我无法隐藏它 .

还有其他想法吗?

2 回答

  • 6

    您应该将 Headers 文本 inside 放在子报表中,例如 title 波段

    In subreport

    <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 (默认值)将确保不返回任何内容,您将看不到 Headers .

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

    有关如何传回报告计数的一些其他详细信息,请查看此信息 .

    How to get report_count from subreport in iReport

  • -1

    谢谢您的帮助 . 我终于可以通过在 Headers 中的“Print When Expression”下使用以下表达式来解决它:

    ($P{SUBR}!=null)
    

    哪里

    $ P

    是子报表的表达式 .

相关问题