有没有办法在文本字段表达式中访问SQL查询结果,以有条件地在标题带中显示它?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法在文本字段表达式中访问SQL查询结果,以有条件地在标题带中显示它?相关的知识,希望对你有一定的参考价值。
我想根据在详细信息区域中的一个记录中检索到的某些值的存在,有条件地在标题区域中显示文本字段。
有没有办法可以从表达式编辑器中访问数据集结果列表,这样我就可以遍历结果列表并验证该特定值的存在?
答案
我会通过在文本字段上使用变量然后评估时间来解决此问题。
首先定义一个验证该特定值是否存在的变量,例如计算它出现的次数。
<variable name="SERIES_D_COUNT" class="java.lang.Integer" calculation="Sum">
<variableExpression><![CDATA["D".equals($F{Series})?1:0]]></variableExpression>
</variable>
然后设置有条件地显示文本字段evaluationTime="Report"
一个常量,指定应在填充过程结束时计算表达式。
请注意,你不能使用printWhenExpression
这没有延迟评估。如果您不想显示任何文本,则需要使用类似的表达式
<textField evaluationTime="Report">
<reportElement x="0" y="0" width="200" height="30" uuid="c5ce6914-e96a-4b7a-bcd9-b9febfb4d003"/>
<textFieldExpression><![CDATA[($V{SERIES_D_COUNT}>0? "Series D is present " + $V{SERIES_D_COUNT} + " times":"")]]></textFieldExpression>
</textField>
如果您需要“浮动”布局,因此如果值存在,则不同的textField应该移动此技术无法使用,因为填充管理器将需要保留该位置,仅在填充报告后评估内容(表达式)。在这些情况下,您需要执行子报表,例如重新查询数据库。
完整的例子
<?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="TestAccessValue" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="4d3c7e04-2b50-46a0-b840-05ab72633357">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="ChartData"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name="Series" class="java.lang.String"/>
<field name="X" class="java.lang.String"/>
<variable name="SERIES_D_COUNT" class="java.lang.Integer" calculation="Sum">
<variableExpression><![CDATA["D".equals($F{Series})?1:0]]></variableExpression>
</variable>
<title>
<band height="35" splitType="Stretch">
<textField evaluationTime="Report">
<reportElement x="0" y="0" width="200" height="30" uuid="c5ce6914-e96a-4b7a-bcd9-b9febfb4d003"/>
<textFieldExpression><![CDATA[($V{SERIES_D_COUNT}>0? "Series D is present " + $V{SERIES_D_COUNT} + " times":"")]]></textFieldExpression>
</textField>
</band>
</title>
<columnHeader>
<band height="24" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="100" height="20" uuid="8ff3bf66-0530-47d1-bd9e-c8cd392b418d"/>
<text><![CDATA[Series]]></text>
</staticText>
<staticText>
<reportElement x="100" y="0" width="100" height="20" uuid="b6e5470d-fcd8-4770-8dc4-bd194f05e15b"/>
<text><![CDATA[X]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="24" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20" uuid="f50e1756-50da-40a3-89f3-7a906659feb1"/>
<textFieldExpression><![CDATA[$F{Series}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="20" uuid="7adb0ce7-3bf5-42ed-b41d-2daee9ee52df"/>
<textFieldExpression><![CDATA[$F{X}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
以上是关于有没有办法在文本字段表达式中访问SQL查询结果,以有条件地在标题带中显示它?的主要内容,如果未能解决你的问题,请参考以下文章