有没有一种方法可以访问文本字段表达式中的SQL查询结果,以便有条件地在标题栏中显示它?

时间:2018-08-31 00:13:10

标签: jasper-reports conditional datasource textfield

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

是否可以通过表达式编辑器访问数据集结果列表,以便遍历结果列表并验证该特定值的存在?

1 个答案:

答案 0 :(得分: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>