RDLC报告未正确检测NULL值

时间:2013-01-11 10:56:18

标签: c# reporting rdlc

我在生成.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的值不是NULL时,报告会正确显示该值,但当它为NULL时(或者当它转换为int类型时为0),报告将返回#Error 。奇怪的是,当我删除if函数并仅显示该字段的值时,报告显示0或空白(它不返回错误)。  我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

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

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

或者撤销支票(检查是否存在,而不是检查它是否存在):

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

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

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

答案 1 :(得分:0)

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

所以你的公式必须是:

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

我也会尝试切换功能:

=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, 
    )

答案 2 :(得分:0)

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

如果值为真NULL,则只需进行一次IsNothing检查。

还要记住,在使用VB .NET does NOT short-circuit的RDLC表达式中Or; VB .NET中与C#或C类似的等效短路or运算符是OrElse运算符。 (但这似乎不会影响到你)。