Jasper reports 如何";“打印时”;有条件

Jasper reports 如何";“打印时”;有条件,jasper-reports,Jasper Reports,我有一个问题,我有一个子报告,它可以打印很多行,因为它位于详细信息栏中,对我来说这很好,但我想在打印报告时根据参数过滤行,我使用选项“打印时间”设置布尔条件,但不起作用,这只适用于一个参数 条件是: (!"N".equals($P{Chk_Amministratori}) || ($F{field1} != $P{CheckDinamico1} || $F{field1} != $P{CheckDinamico2} || $F{field1} != $P{CheckDinamico3} || $

我有一个问题,我有一个子报告,它可以打印很多行,因为它位于详细信息栏中,对我来说这很好,但我想在打印报告时根据参数过滤行,我使用选项“打印时间”设置布尔条件,但不起作用,这只适用于一个参数

条件是:

(!"N".equals($P{Chk_Amministratori})
|| ($F{field1} != $P{CheckDinamico1}
|| $F{field1} != $P{CheckDinamico2}
|| $F{field1} != $P{CheckDinamico3}
|| $F{field1} != $P{CheckDinamico4}
|| $F{field1} != $P{CheckDinamico5}
|| $F{field1} != $P{CheckDinamico6}
|| $F{field1} != $P{CheckDinamico7}
|| $F{field1} != $P{CheckDinamico8}
|| $F{field1} != $P{CheckDinamico10}) ? Boolean.TRUE : Boolean.FALSE
例如,如果我输入一个参数,它就会工作

$F{field1}!=$P{CheckDinamico10}?Boolean.TRUE:Boolean.FALSE


有人能帮我吗?

你表达式中的逻辑有缺陷。你有这个

$F{field1} != $P{CheckDinamico1}
|| $F{field1} != $P{CheckDinamico2}
|| ...
假设CheckDinamico1是5,CheckDinamico2是7。那么您的表达式是field1!=5或字段1!=7或

无论field1的值是多少,此表达式都为真。如果field1是3,它将与5和7都不同,因此表达式为true。如果fiedl1是5,它将不同于7,并且由于或,表达式也将为真。如果field1是7,它将不同于5,所以表达式也是真的

也许你想要,而不是,或者在表达中?另外,如前所述,
=
可能并不总是有效,因此使用
equals
更安全,并且您可以使用基本布尔表达式,而不需要
boolean
。因此,尝试以下方法:

(!"N".equals($P{Chk_Amministratori})
|| (!$F{field1}.equals($P{CheckDinamico1})
&& !$F{field1}.equals($P{CheckDinamico2})
&& !$F{field1}.equals($P{CheckDinamico3})
&& !$F{field1}.equals($P{CheckDinamico4})
&& !$F{field1}.equals($P{CheckDinamico5})
&& !$F{field1}.equals($P{CheckDinamico6})
&& !$F{field1}.equals($P{CheckDinamico7})
&& !$F{field1}.equals($P{CheckDinamico8})
&& !$F{field1}.equals($P{CheckDinamico10}))

$F{field1}!=$P{CheckDinamico10}?Boolean.TRUE:Boolean.FALSE
-这是有效的语法,顺便说一句,您可以使用privative Boolean类型。也许你比较对象时出错了(我不知道字段和参数的类型)。字段总是相同的,但该字段的多个值在子报表中传递,我想对传递的这些值进行参数化,以便我只能看到传递准确值的值。谢谢你,DADADA67,我尝试了你的解决方案,它完全正确。非常感谢。