我有一个报告,使用参数来确定报告标题。没有数据时显示为null。我已经尝试更改变量$ V {reportName}评估时间,但没有运气。有人能帮助我吗?
感谢。 PS:它使用的是mssql数据适配器,当前的查询字符串不返回任何行。要返回行,请将2 = 1更改为1 = 1.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 5.6.1.final using JasperReports Library version 5.6.1 -->
<!-- 2017-05-02T07:59:20 -->
<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="Evaluate" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="a736ce53-7e76-4194-9086-96d2270a6250">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="SYDPC1744-EXPRESSR2"/>
<parameter name="ReportType" class="java.lang.String">
<defaultValueExpression><![CDATA["B"]]></defaultValueExpression>
</parameter>
<queryString language="SQL">
<![CDATA[select Col1 from (values (1),(2)) as a(Col1) where 2=1]]>
</queryString>
<field name="Col1" class="java.lang.Integer"/>
<variable name="ReportName" class="java.lang.String">
<variableExpression><![CDATA[$P{ReportType}.equals("A")? $V{reportTitleA}:$V{reportTitleB}]]></variableExpression>
</variable>
<variable name="reportTitleA" class="java.lang.String">
<variableExpression><![CDATA["Report A"]]></variableExpression>
</variable>
<variable name="reportTitleB" class="java.lang.String">
<variableExpression><![CDATA["Report Other"]]></variableExpression>
</variable>
<pageHeader>
<band height="49" splitType="Stretch">
<textField evaluationTime="Report">
<reportElement x="0" y="0" width="390" height="20" uuid="98c519b9-7350-4cd6-a71e-f2fb1c0e7b80"/>
<textFieldExpression><![CDATA[$V{ReportName}]]></textFieldExpression>
</textField>
</band>
</pageHeader>
<columnHeader>
<band height="14" splitType="Stretch"/>
</columnHeader>
<detail>
<band height="15" splitType="Stretch">
<property name="local_mesure_unitheight" value="pixel"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<textField>
<reportElement x="0" y="0" width="100" height="14" uuid="82ab5741-1138-4173-88f5-42ef07a6cb9f">
<property name="local_mesure_unitheight" value="pixel"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textFieldExpression><![CDATA[$F{Col1}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
答案 0 :(得分:1)
您的问题是设置<textFieldExpression>
而不是<initialValueExpression>
。
<textFieldExpression>
用于计算。 仅用于计算!
<initialValueExpression>
用于此变量的初始值。
当没有数据时,jasperreports不会通过计算表达式,因为没有办法,你可以根据任何数据进行计算。
所以只需使用初始值表达式...
在这种情况下,查看元素的评估时间完全没有任何好处,所以你可以跳过它。
另请注意,通过对变量使用良好的顺序,可以避免许多错误。
这是工作代码(摘录):
<variable name="reportTitleA" class="java.lang.String">
<initialValueExpression><![CDATA["Report A"]]></initialValueExpression>
</variable>
<variable name="reportTitleB" class="java.lang.String">
<initialValueExpression><![CDATA["Report Other"]]></initialValueExpression>
</variable>
<variable name="ReportName" class="java.lang.String">
<initialValueExpression><![CDATA[$P{ReportType}.equals("A")? $V{reportTitleA}:$V{reportTitleB}]]></initialValueExpression>
</variable>
<pageHeader>
<band height="49" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="390" height="20" uuid="98c519b9-7350-4cd6-a71e-f2fb1c0e7b80"/>
<textFieldExpression><![CDATA[$V{ReportName}]]></textFieldExpression>
</textField>
</band>
</pageHeader>