jasperReport/iReport 子报表显示空白(未显示)

Posted

技术标签:

【中文标题】jasperReport/iReport 子报表显示空白(未显示)【英文标题】:jasperReport/iReport subreport shows blank (not displayed) 【发布时间】:2012-11-08 10:36:15 【问题描述】:

我正在尝试使用 iReport 设计器(report1.jrxml)从主报告创建子报告(report1_subreport3.jrxml)都具有 空数据源) 。主报表detail band包含静态文本(“Main Report”),子报表元素和子报表在其对应的detail band(”中包含静态文本子报告”)

但是点击主报表的预览标签只显示静态文本“主报表”不显示子报表的静态文本(“子报表”)。

我也浏览了链接http://community.jaspersoft.com/questions/524978/empty-subreport-xml-datasource-ireport,但仍然遇到问题。

下面是report1.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="20036b98-ef64-4dea-8345-b89bcd8f2671">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="68"/>
    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["D:\\soapReport\\jasperReport\\"]]></defaultValueExpression>
    </parameter>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band  splitType="Stretch"/>
    </title>
    <pageHeader>
        <band  splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band  splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band  splitType="Stretch">
            <staticText>
                <reportElement uuid="d49ee6bf-1a13-41bb-9feb-f0fb2ec414f2" x="71" y="28"  />
                <textElement/>
                <text><![CDATA[Main Report]]></text>
            </staticText>
            <subreport>
                <reportElement uuid="364d3c38-a0a1-4fa5-b0bf-12b22314ac5e" x="311" y="14"  />
                <connectionExpression><![CDATA[$PREPORT_CONNECTION]]></connectionExpression>
                <subreportExpression><![CDATA[$PSUBREPORT_DIR + "report1_subreport3.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </detail>
    <columnFooter>
        <band  splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band  splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band  splitType="Stretch"/>
    </summary>
</jasperReport>

以下是report1_subreport3.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1_subreport3" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="7ca2d973-972c-4c56-8d5e-503b32b4afc6">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band  splitType="Stretch"/>
    </title>
    <pageHeader>
        <band  splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band  splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band  splitType="Stretch">
            <staticText>
                <reportElement uuid="5f488fe4-f9f7-4f12-9c1e-812661026bd7" x="222" y="50"  />
                <textElement/>
                <text><![CDATA[Sub Report]]></text>
            </staticText>
        </band>
    </detail>
    <columnFooter>
        <band  splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band  splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band  splitType="Stretch"/>
    </summary>
</jasperReport>

在此先感谢您提供的任何帮助...


感谢 Gopi 的更改,但 仍然显示空白 subreport以下是主要报告

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="748f862c-3467-4c8c-89f6-04a571192482">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["D:/soapReport/jasperReport/"]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band  splitType="Stretch"/>
    </title>
    <pageHeader>
        <band  splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band  splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band  splitType="Stretch">
            <staticText>
                <reportElement uuid="17f2cfc8-497a-4676-b83a-acf55bccac04" x="33" y="15"  />
                <textElement/>
                <text><![CDATA[Main Report]]></text>
            </staticText>
        </band>
    </detail>
    <columnFooter>
        <band  splitType="Stretch">
            <subreport>
                <reportElement uuid="40f53bea-c9eb-46a7-b4fc-3d592da3ef90" x="234" y="17"  />
                <connectionExpression><![CDATA[$PREPORT_CONNECTION]]></connectionExpression>
                <subreportExpression><![CDATA["D:/soapReport/jasperReport/report1_subreport1.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </columnFooter>
    <pageFooter>
        <band  splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band  splitType="Stretch"/>
    </summary>
</jasperReport>       

以下是子报告

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1_subreport1" language="groovy" pageWidth="555" pageHeight="802" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="62bf7fb7-8145-4aa6-b963-c98eefac9862">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <columnHeader>
        <band  splitType="Stretch">
            <staticText>
                <reportElement uuid="9bf9eafc-c1e0-49fa-8bb8-ed6c496498da" x="213" y="20"  />
                <textElement/>
                <text><![CDATA[Sub Report]]></text>
            </staticText>
        </band>
    </columnHeader>
</jasperReport>

如果我遗漏了什么,请帮助我...

【问题讨论】:

【参考方案1】:

将您的子报告字段放在除详细信息带之外的任何其他带中,并将whenNoDataType="AllSectionsNoDetail" 添加到您的 xml 文件中。 将其添加到&lt;JasperReport&gt; 标记中的其他报告属性中。 您还可以使用 GUI 设计器添加。 打开您的子报告并在属性编辑器中,在选项末尾您将找到 When No Data 选项。从可用选项列表中选择All Sections with No Detail主要报告:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="12"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["/home/qualian/Desktop/gopi/prjreport/"]]></defaultValueExpression>
</parameter>
<queryString>
    <![CDATA[]]>
</queryString>
<background>
    <band splitType="Stretch"/>
</background>
<title>
    <band  splitType="Stretch"/>
</title>
<pageHeader>
    <band  splitType="Stretch"/>
</pageHeader>
<columnHeader>
    <band  splitType="Stretch"/>
</columnHeader>
<detail>
    <band  splitType="Stretch">
        <subreport>
            <reportElement x="33" y="56"  />
            <connectionExpression><![CDATA[$PREPORT_CONNECTION]]></connectionExpression>
            <subreportExpression class="java.lang.String"><![CDATA[$PSUBREPORT_DIR+"report3_subreport1.jasper"]]></subreportExpression>
        </subreport>
        <staticText>
            <reportElement x="33" y="15"  />
            <textElement/>
            <text><![CDATA[Main Report]]></text>
        </staticText>
    </band>
</detail>
<columnFooter>
    <band  splitType="Stretch"/>
</columnFooter>
<pageFooter>
    <band  splitType="Stretch"/>
</pageFooter>
<summary>
    <band  splitType="Stretch"/>
</summary>

子报告:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1_subreport3" language="groovy" pageWidth="555" pageHeight="802" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<background>
    <band splitType="Stretch"/>
</background>
<columnHeader>
    <band  splitType="Stretch">
        <staticText>
            <reportElement x="107" y="12"  />
            <textElement/>
            <text><![CDATA[Sub Report]]></text>
        </staticText>
    </band>
</columnHeader>

这就像一个魅力。希望这可以帮助。

【讨论】:

嗨,Gopi,感谢您的输入...我尝试了您的步骤 1. 在另一个波段 (columnfooter) 中添加子报表和 2. 在 元素中添加 whenNoDataType="AllSectionsNoDetail"但是对于最后一步,我没有在子报表属性编辑器中获得“无数据时”选项。之后,如果我进入主报告的预览选项卡,它会在子报告的位置显示相同的输出为空白:( 您可以在标签中添加或使用 iReport 进行编辑。不需要同时添加。 是.. Gopi 在添加标签后也.. 观察到同样的问题... 子报告在主报告中仍然显示空白.. 在报告中,为了简单起见,我删除了一些乐队。 你能给出为什么不能将你的子报告字段放在详细信息带中的原因吗?【参考方案2】:

使用我在主报告中包含的以下标签解决了上述问题。我们需要使用空数据源(new net.sf.jasperreports.engine.JREmptyDataSource())

SUBREPORT.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.3.1.final using     JasperReports Library version 6.3.1  -->
<!-- 2016-12-15T10:33:58 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="HYPERLINKS_SUBREPORT" pageWidth="595" pageHeight="842" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="ad9606b1-969d-4340-a7eb-61dc30ec8f0d">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<property name="com.jaspersoft.studio.unit." value="pixel"/>
<property name="com.jaspersoft.studio.unit.pageHeight" value="pixel"/>
<property name="com.jaspersoft.studio.unit.pageWidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.topMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.bottomMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.leftMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.rightMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.columnWidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.columnSpacing" value="pixel"/>
<queryString>
    <![CDATA[]]>
</queryString>
<detail>
    <band  splitType="Stretch">
        <staticText>
            <reportElement x="16" y="47"   uuid="866e60e7-16a0-4fea-b56f-ca4143e98fec"/>
            <text><![CDATA[Testing text]]></text>
        </staticText>
    </band>
</detail>

main_report.jrxml 的 XML

        <subreport>
            <reportElement positionType="Float" x="0" y="220"   uuid="62463158-73b1-4089-b66c-633d3a987649"/>
            <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource()]]></dataSourceExpression>
            <subreportExpression><![CDATA["SUBREPORT.jasper"]]></subreportExpression>
        </subreport>

同样可以使用 Jaspersoft Studio 实现。

【讨论】:

编辑 subreport.jrxml 文件是创建文件后的唯一选项。或者,您也可以在主文件中选择子报表元素后,通过编辑参数表达式来设置该值。 将元素 &lt;dataSourceExpression&gt;&lt;![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource()]]&gt;&lt;/dataSourceExpression&gt; 放在 jasper studio 上,然后将其清除。可能不在正确的 XSD 中。 忘记我上面的评论,当我们将它从 GUI 和 XML 显示中放置时,就可以了。【参考方案3】:

任何对 jasper reports studio 6.3.0 不显示子报表有问题的人都应尝试更改子报表中的参数名称,然后更新主报表子报表小部件“编辑参数”选项中的参数连接以匹配新参数姓名。也可以避免下划线即。 “USER_ID”。

【讨论】:

【参考方案4】:

在我的情况下,问题是由 JasperReportStudio 在保存子报表后未构建 .jasper 文件引起的。这导致主报告始终包含我创建的子报告的第一个版本(其中有一些错误,因此没有显示任何内容)。

解决方法是每次保存后按Ctrl-S再按Ctrl-B。这会重建子报表 .jasper 文件并导致它在主报表的预览中正确刷新。

【讨论】:

以上是关于jasperReport/iReport 子报表显示空白(未显示)的主要内容,如果未能解决你的问题,请参考以下文章

使用JasperReport+iReport生成报表出现一个问题,请各位高手帮忙看一下!急!

生成报表(转)

请教一些关于JasperReport+iReport的相关问题,各位前辈帮帮忙.

如何在JSP中实现柱形图 [

jasperreport+iReport 生成的Excel全在一个单元格内

jasperreport ireport 怎么获取list<map<string,object>>数据