6

我在生成 .rdlc 报告时遇到问题。其中一列具有以下表达式:

IIF(CInt(Fields!MyColumn.Value) = 0 or Fields!MyColumn.Value is nothing,"Unknown",Fields!MyColumn.Value)

我还尝试将该字段用作字符串:

=IIF(IsNothing(Fields!MyColumn.Value) or Fields!MyColumn.Value is nothing,"Unknown",Fields!MyColumn.Value.ToString())

当 MyColumn 的值为 notNULL时,报表正确显示该值,但当它是NULL(或转换为 int 类型时为 0)时,报表返回#Error。奇怪的是,当我删除 if 函数并仅显示该字段的值时,报告显示 0 或空白(它不返回错误)。我怎样才能解决这个问题?

4

4 回答 4

4

您可以尝试在不进行比较的情况下进行验证:

=IIf(Fields!YourColumn.Value
    , Fields!YourColumn.Value
    , "Unknown")

或反转您的检查(检查它是否存在,而不是检查它是否不存在):

=IIf(Fields!YourColumn.Value > 0
    , Fields!YourColumn.Value
    , "Unknown")

另外,我不确定,但这可能与在同一列中使用不同的值类型有关。尝试对整个列使用相同的值类型。例如,只输出字符串,或者只输出整数。

如果没有任何效果,您还可以检查代码中的 NULL 值,然后将值设置为 0 或 -1(左右)。然后在你的 RDLC 报告中你可以检查一下。

于 2013-01-11T11:15:20.883 回答
1

我认为您必须先检查您的字段是否为空,否则您将在比较中得到错误(NULL大于 0?-> 错误!)

所以你的公式必须是:

=IIF(IsNothing(Fields!MyColumn.Value) or CInt(Fields!MyColumn.Value) = 0,"Unknown",Fields!MyColumn.Value)

我也会尝试 Switch 功能:

=Switch(
    IsNothing(Fields!MyColumn.Value), "Unknown", 
    Fields!MyColumn.Value = 0, "Unknown", 
    Fields!MyColumn.Value > 0, Fields!MyColumn.Value, 
    )

此外,如果您的字段已经是数字,则不必使用 CInt(""),否则公式将为:

=Switch(
    IsNothing(Fields!MyColumn.Value), "Unknown", 
    CInt(Fields!MyColumn.Value) = 0, "Unknown", 
    CInt(Fields!MyColumn.Value) > 0, Fields!MyColumn.Value, 
    )
于 2013-01-11T11:25:16.513 回答
0

根据@Deruijter 的回答下的评论,如果表达式if (dr.ItemArray.GetValue(15).ToString() == "")对您有效且没有错误,那么您的字符串不是NULL;您的数据集中只有空(即零长度)字符串。在这种情况下,在 RDLC 表达式中,您将使用,或技巧Len来代替。IsNothingIs NothingCInt

如果这些值是真实的NULL,那么一次IsNothing检查就足够了。

还要记住,Or在使用 VB .NET 的 RDLC 表达式中不会短路orVB .NET 中与 C# 或 C 类似的等效短路运算符是OrElse运算符。(不过,这似乎对您没有影响)。

于 2016-08-03T16:49:45.920 回答
0

您可以简单地去设计器并设置:

this.column.AllowDBNull = true;
于 2021-09-21T15:51:54.970 回答