如何用条件 "打印时"?

问题描述 投票:-1回答:1

我有一个问题,我有一个子报表,打印了很多行,因为它在细节带,对我来说这是很好的,但我想在打印报表时根据参数过滤行,我用 "打印时 "这个选项来设置布尔条件,但不工作,这只对一个参数有效。

条件是。

(!"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。

谁能帮帮我?

jasper-reports
1个回答
0
投票

你的表达式的逻辑是有问题的。 你的表达式是这样的

$F{field1} != $P{CheckDinamico1}
|| $F{field1} != $P{CheckDinamico2}
|| ...

假设CheckDinamico1是5,CheckDinamico2是7,那么你的表达式是field1 != 5 OR field1 != 7 OR 。

无论field1的值是多少,这个表达式都是真的。 如果field1是3,它将与5和7都不同,所以表达式为真。 如果field1是5,它将与7不同,由于OR,该表达式也将为真。 如果field1是7,它将与5不同,所以表达式同样为真。

也许你在表达式中想要的是AND而不是OR? 另外,如 Alex K 指出: != 并不总是有效,所以更安全的做法是使用 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}))
© www.soinside.com 2019 - 2024. All rights reserved.