我在子报告中有一个简单的文本字段。
目标:仅当参数“evenRow”为 1 <时,才为“Forecolor”应用“propertyExpression” / EM>
以下不起作用,但我尝试了一下......
<textField>
<reportElement key="" mode="Transparent" x="108" y="1" width="76" height="13">
<propertyExpression name="net.sf.jasperreports.style.forecolor">
<![CDATA[$P{evenRow} == 1 ? $P{colorZebra1_text} : ""]]>
</propertyExpression>
</reportElement>
<textElement><font fontName="SansSerif" size="8"/></textElement>
<textFieldExpression>"Text"</textFieldExpression>
</textField>
上下文:父报告称之为!包含文本字段多次的子报表(如附图所示)。每次调用时,父报告都会将参数“evenRow”发送为1或0 ......
//snipped from parent report to show that "evenRow" is 1 or 0
($V{REPORT_COUNT}.intValue() % 2 == 0 ? 1 : 0)
问题:我如何为动态“Forecolor”创建一个propertyExpression,该参数仅在我的参数“evenRow”设置为 1 ?
注意:我知道我可以使用conditional styles - &gt;一般样式的问题是它们永远不是动态的,即我必须为每个可以设置的颜色创建1个样式...并且因为颜色可以设置为任何十六进制值,这不是一个选项
答案 0 :(得分:4)
使用 net.sf.jasperreports.style.forecolor 的概念在实践中与 propertyExpression 配合使用。
以下是 propertyExpression 使用参数的小模板:
buttonName = Button(command=lambda: exFunc(int(1Entry.get()), int(2Entry.get())))
JSS 生成的输出结果如下所示:
我使用&#34;#000000&#34; (黑色)作为默认颜色。
看起来您需要检查并修复 $ P {evenRow}
的值我在第一个例子中使用了 propertyExpression 参数的子报表。此报告正在使用&#34; external&#34;参数,但没有区别 - 它只是一个参数
子报告&lt; 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="Style forecolor" pageWidth="595" pageHeight="842" whenNoDataType="NoDataSection" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<parameter name="color" class="java.lang.String">
<defaultValueExpression><![CDATA["#E3106B"]]></defaultValueExpression>
</parameter>
<parameter name="isApplyColor" class="java.lang.Boolean">
<defaultValueExpression><![CDATA[true]]></defaultValueExpression>
</parameter>
<parameter name="DEFAULT_COLOR" class="java.lang.String" >
<defaultValueExpression><![CDATA["#000000"]]></defaultValueExpression>
</parameter>
<title>
<band height="79" splitType="Stretch">
<textField>
<reportElement x="211" y="39" width="100" height="30" uuid="4af3eb91-2334-40fe-a77a-45378fe93210">
<propertyExpression name="net.sf.jasperreports.style.forecolor"><![CDATA[$P{isApplyColor} ? $P{color} : $P{DEFAULT_COLOR}]]></propertyExpression>
</reportElement>
<textFieldExpression><![CDATA["Text Field"]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
第二个 textField 仅用于检查 $ P {evenRow} 的值。
设计非常简单:
主报告正在使用此子报告
主报告的 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="Subreport" pageWidth="595" pageHeight="842" whenNoDataType="NoDataSection" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<parameter name="color" class="java.lang.String">
<defaultValueExpression><![CDATA["#E3106B"]]></defaultValueExpression>
</parameter>
<parameter name="DEFAULT_COLOR" class="java.lang.String">
<defaultValueExpression><![CDATA["#000000"]]></defaultValueExpression>
</parameter>
<parameter name="evenRow" class="java.lang.Integer"/>
<title>
<band height="20" splitType="Stretch">
<textField>
<reportElement x="130" y="0" width="100" height="20">
<property name="com.jaspersoft.studio.unit.height" value="pixel"/>
<propertyExpression name="net.sf.jasperreports.style.forecolor"><![CDATA[$P{evenRow} == 0 ? $P{color} : $P{DEFAULT_COLOR}]]></propertyExpression>
</reportElement>
<textFieldExpression><![CDATA["Text Field"]]></textFieldExpression>
</textField>
<textField>
<reportElement x="20" y="0" width="100" height="20"/>
<textFieldExpression><![CDATA["evenRow: " + $P{evenRow}]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
textField 用于显示行号。
设计看起来像:
JSS的输出结果:
答案 1 :(得分:1)
我会使用html markup或styled text来表达动态色彩。
"<font color='" + ($P{evenRow}.equals("1") ? $P{colorZebra1_text} : "#000000") + "'>Hello world</font>"
<强> 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="ParameterForeground" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="18af9727-d961-4a87-ad3b-c7f64aa36f0d">
<parameter name="evenRow" class="java.lang.String"/>
<parameter name="colorZebra1_text" class="java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString>
<title>
<band height="79" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="330" height="30" uuid="78773d07-454d-4168-ac36-1351e6b278c1"/>
<textElement markup="html"/>
<textFieldExpression><![CDATA["<font color='" + ($P{evenRow}.equals("1") ? $P{colorZebra1_text} : "#000000") + "'>Hello world</font>"]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
<强>结果强>
参数evenRow
可能会优于java.lang.Integer
类,但由于您使用equals
,我认为您已将其定义为java.lang.String
,如果Integer
表达式为$P{evenRow}==1