gpt4 book ai didi

jasper-reports - 如何使用条件/动态前景色创建属性?

转载 作者:行者123 更新时间:2023-12-05 00:51:03 28 4
gpt4 key购买 nike

我在子报表中有一个简单的文本字段。

目标:仅当参数“evenRow”为 时才对“Forecolor”应用“propertyExpression” 1

以下不起作用,但我试了一下...

<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)

问题:如何为动态“前景色”创建属性表达式,该属性仅在我的参数“evenRow”设置为 时生效1 ?

enter image description here

注意:我知道我可以使用 conditional styles -> 样式的一般问题是它们从来都不是动态的,即我必须为每种“可以”设置的颜色创建 1 种样式......而且因为颜色可以设置为任何十六进制值,这不是一个选项。

最佳答案

使用 net.sf.jasperreports.style.forecolor 的概念在实践中与 propertyExpression 配合得很好。

带参数的单一报告

这是带有在 propertyExpression 中使用的参数的小模板:

<?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>

在 JSS 生成的输出结果如下所示:

Preview at JSS

我使用“#000000”(黑色)作为默认颜色。

看起来您需要检查并修复 $P{evenRow} 的值

带有子报表和主报表的示例。

我在第一个示例中使用了带有 propertyExpression 参数的子报表。此报告使用“外部”参数,但没有区别 - 它只是一个参数

子报表的 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 仅用于检查 $P{evenRow} 的值。

设计非常简单:

Design at JSS

主报表正在使用这个子报表

主报告的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="Master" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="10 empty rows"/>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textFieldExpression><![CDATA[$V{REPORT_COUNT}]]></textFieldExpression>
</textField>
<subreport>
<reportElement x="130" y="0" width="200" height="20"/>
<subreportParameter name="evenRow">
<subreportParameterExpression><![CDATA[($V{REPORT_COUNT} % 2 == 0 ? 1 : 0)]]></subreportParameterExpression>
</subreportParameter>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource()]]></dataSourceExpression>
<subreportExpression><![CDATA["Subreport.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
</jasperReport>

textField 用于显示行号。

设计看起来像:

The master report at JSS

JSS的输出结果:

Preview at JSS

关于jasper-reports - 如何使用条件/动态前景色创建属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44886236/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com