0

报告将显示两列 Foo 和 Bar

Foo 的某些行是空的 有些具有数值:

 Foo:
+----+
|    |
+----+
|10.0|
+----+

然后是 Bar 列,该列将从 Foo 中获取值并将 10 添加到它们,报告应产生如下结果:

 Foo: Bar:
+----+----+
|    |    |
+----+----+
|10.0|20.0|
+----+----+

这就是我用来确定 Foo 在 Bar 中是否为数字的表达式:

=IsNumeric(ReportItems!FooBox.Value)

这是 Expression 将产生的结果:

 Foo: Bar:
+----+-----+
|    |False|
+----+-----+
|10.0|True |
+----+-----+

好的,到目前为止,这正是我想要的方式,因此我这样写 My Expression:

=IIf(IsNumeric(ReportItems!FooBox.Value),
            ReportItems!FooBox.Value +10,
            "")

这将产生以下结果:

Foo: Bar:
+----+------+
|    |#Error|
+----+------+
|10.0|20.0  |
+----+------+

最奇怪的是,当我删除 IIf 的 Truepart 中的小添加时,它将执行:

=IIf(IsNumeric(ReportItems!FooBox.Value),
                ReportItems!FooBox.Value,
                "")

Foo:   Bar:
+----+------+
|    |      |
+----+------+
|10.0|10.0  |
+----+------+

就好像三元运算符的“错误”部分无论如何都会被执行,从而生成这个 castError 或任何可能的东西。

我怎样才能正确转换值以显示结果如前所述?

4

1 回答 1

1

确实 - 使用 IIf 将导致对两个语句(真假)进行评估,并导致您遇到错误。

在您的情况下,我会创建自己的函数来处理此问题 - 您可以将其放在报告的代码字段中(单击页面区域外部以访问报告对象)

您的函数可能如下所示:

Public Function MyAdd(val As Object) As Nullable(Of Integer)
        If TypeOf(val) Is Integer Then
             Return val + 10
        Else
             Return Nothing
        End If
End Function

您可能需要使用使用的类型(Object 和 Nullable Of Integer 可能不适合您)

然后,当然,在您的表达式中使用 MyAdd 并将 ReportItems!FooBox.Value 作为参数传递

于 2013-09-24T16:16:57.003 回答