繁体   English   中英

使用 ReportItem 集合的行可见性表达式不起作用

[英]Row visibility expression using ReportItem collection not working

这是该问题先前版本的主要编辑,无论如何这对未来的读者来说几乎没有价值。

我有一个报告,我想根据某些字段中的数据隐藏某些行,但也能够根据参数值覆盖它。

因此,对于我的可见性(隐藏),我使用以下表达式:

=iif(CDbl(ReportItems!tbOEM1.Value) >= 20 Or CDbl(ReportItems!tbOEM2.Value) >= 20 Or CDbl(ReportItems!tbOEM3.Value) >= 20 Or Parameters!OEM20.Value.Equals(False)
,    False
,   True
)

我认为这应该意味着,如果 3 个tbOEM字段中的任何一个 >= 20,则显示该行。 但是,如果用户为“OEM20”参数(布尔值)选择了False ,则无论值如何,都将显示所有行。

但是,当我运行报告并为 OEM20 参数选择True时,没有显示任何行,即使我知道有些行的 OEM 值超过 20。

为了进行调查,我为每个 tbOEM 报告项添加了背景颜色表达式。 这是 tbOEM1 的背景颜色表达式:

=iif(CDbl(ReportItems!tbOEM1.Value) >= 20
,   "Red"
,   "White"
)

当我为 OEM20 参数使用 False 运行报告时,我看到所有行都返回了,并且没有字段被涂成红色,即使是那些应该是因为它们是值 >=20 的 tbOEM 字段。

所以我想知道这是否是执行顺序问题,在设置可见性和背景颜色时 ReportItem 的值尚不知道? 这在任何地方都知道并记录在案吗? 我用谷歌搜索并找不到任何东西。

还是我在做其他可以修复的错误?

我已经知道一种解决方法是使用填充表达式中 tbOEM 字段的数据字段计算,而不是使用 ReportItems 集合。 所以你不必费心告诉我这个选项。

这里有一些东西可以尝试。 将此作为答案,因为它太大而无法发表评论。

我仍然认为类型比较/转换正在发生一些奇怪的事情。

也许tbOEM文本框是带有非数字字符(甚至只是一个空格)的字符串,因此CDbl转换失败,因此CDbl(ReportItems.tbOEM1.Value) >= 20测试失败,即使它看起来高于 20 时显示为字符串。 鉴于您的背景颜色表达也失败了,这似乎是这种情况。 让我们使用Val表达式进行比较:

Val(ReportItems!tbOEM1.Value) >= 20

Val在转换为数值时不会出错,它只是尽其所能并返回它找到的任何数字。 将字段转换为用于显示目的的数值以及背景颜色表达式,以便我们看到表达式看到的内容,而不仅仅是显示的文本。 在您的tbOEM1文本框上,将这些表达式用于以下属性:

价值

=Val(Fields!OEM1.Value)

背景颜色

=iif(Val(ReportItems!tbOEM1.Value) >= 20, "Red", "White")

如果这仍然失败(例如,文本框不再显示值),那么让我们先修剪它以去除任何空格: =Val(Trim(Fields.OEM1.Value))

如果OEM1字段是十进制值,请使用20.0而不是20 ,因此它与 Double 而不是 Integer 进行比较,以防比较中的隐式类型转换发生一些奇怪的事情。

好的,现在希望文本框显示正确的数字并且背景颜色正确。 现在我们只需要修复行的Visibility.Hidden表达式。 我不会在这里使用Value.Equals因为参数已经是 boolean 所以我们可以直接使用它:

=iif(Val(ReportItems!tbOEM1.Value) >= 20 Or Val(ReportItems!tbOEM2.Value) >= 20 Or Val(ReportItems!tbOEM3.Value) >= 20 Or Not Parameters!OEM20.Value
    , False
    , True
)

这需要通过选择 tablix 左侧行的句柄来应用于整行,而不是直接应用于文本框。

当然,如果上面的实验需要,添加Trim function。

祝你好运。 我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM