有人可以告诉我如何使用printWhenExpression
JasperReports 吗?
4 回答
你有相对于 boolean 的错误吗?
因为您需要使用 Boolean 而不是原始类型。
所以:
$F{mesure} != "PH"
($F{userfd4}).equals("1") ? true : false
会给cannot cast from boolean to Boolean
。
( $F{mesure}.startsWith("PH") ? Boolean.TRUE:Boolean.FALSE )
($F{userfd4}).equals("1") ? Boolean.TRUE : Boolean.FALSE
会是正确的。
另请参阅此示例
2015 年 11 月更新(7 年后)
在jasper 报告6.0 中,这不是必需的:
您可以返回其中一个boolean
或Boolean
一个简单的表达式,如$F{fieldName}.equals("hello")
将起作用。
您可以在中查看该命令的演示demo/samples/tableofcontents/reports/TocPart.jrxml
<reportElement style="Sans_Bold" positionType="Float" x="50" y="0" width="100" height="15" isRemoveLineWhenBlank="true" uuid="db8b68c6-4430-4199-8967-3ab5c077cb56">
<property name="local_mesure_unitx" value="pixel"/>
<property name="com.jaspersoft.studio.unit.x" value="px"/>
<printWhenExpression><![CDATA[$F{level} == 1]]></printWhenExpression>
</reportElement>
另一张海报很好地解释了如何使用它的技术细节,所以我将尝试解释人们可能会发现它有用的情况。
基本上,它允许您根据布尔表达式显示或隐藏单元格的内容。例如,您可能希望仅在该人超过 18 岁时才显示该人的姓名,然后在姓名字段中使用 printwhen 表达式,例如:
$F{age} >= 18
You can also use the static method "Boolean.valueOf(boolean b)". It does exactly the same logic as "($F{mesure}.startsWith("PH") ? Boolean.TRUE:Boolean.FALSE)" and good rule of thumb is don't recreate the wheel.
Boolean.valueOf($F{mesure}.startsWith("PH"))
Boolean.valueOf($F{userfd4}).equals("1"))
$P{mesure}.equals("200") 应该可以在没有任何额外细节的情况下工作。如果条件为真,它将打印