16

有人可以告诉我如何使用printWhenExpressionJasperReports 吗?

4

4 回答 4

21

你有相对于 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 年后)

Petter Friberg在评论中指出:

jasper 报告6.0 中,这不是必需的:
您可以返回其中一个booleanBoolean一个简单的表达式,如$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>
于 2008-11-17T06:16:18.750 回答
5

另一张海报很好地解释了如何使用它的技术细节,所以我将尝试解释人们可能会发现它有用的情况。

基本上,它允许您根据布尔表达式显示或隐藏单元格的内容。例如,您可能希望仅在该人超过 18 岁时才显示该人的姓名,然后在姓名字段中使用 printwhen 表达式,例如:

$F{age} >= 18
于 2008-11-19T15:02:22.777 回答
2

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

于 2009-02-12T15:41:55.533 回答
1

$P{mesure}.equals("200") 应该可以在没有任何额外细节的情况下工作。如果条件为真,它将打印

于 2013-07-12T12:56:14.187 回答