有没有办法在文本字段表达式中访问SQL查询结果,以有条件地在标题带中显示它?

问题描述 投票:1回答:1

我想根据在详细信息区域中的一个记录中检索到的某些值的存在,有条件地在标题区域中显示文本字段。

有没有办法可以从表达式编辑器中访问数据集结果列表,这样我就可以遍历结果列表并验证该特定值的存在?

jasper-reports conditional datasource textfield
1个回答
0
投票

我会通过在文本字段上使用变量然后评估时间来解决此问题。

首先定义一个验证该特定值是否存在的变量,例如计算它出现的次数。

<variable name="SERIES_D_COUNT" class="java.lang.Integer" calculation="Sum">
   <variableExpression><![CDATA["D".equals($F{Series})?1:0]]></variableExpression>
</variable>

然后设置有条件地显示文本字段evaluationTime="Report"

来自JasperReports api

一个常量,指定应在填充过程结束时计算表达式。

请注意,你不能使用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>
© www.soinside.com 2019 - 2024. All rights reserved.