RDLC报表IIF条件else分支异常执行致报错问题咨询
问题原因及解决方法
核心原因
RDLC报表中使用的IIF函数对应VB.NET的IIf,它不支持短路求值——会先计算所有分支的表达式,再根据条件判断返回哪个结果。也就是说,即便IsNothing(Fields!Incident_Custom_Column_152.Value)为True,代码里的Fields!Incident_Custom_Column_152.value.IndexOf("/")也会被提前执行。当字段值为空时,调用IndexOf方法会触发空引用错误,最终导致报表显示#Error。
解决方法
可以通过以下几种方式避免这个问题:
方法1:使用Switch函数
Switch函数会按顺序判断条件,一旦某个条件为真,就返回对应结果,后续表达式不会被计算:
=Switch( IsNothing(Fields!Incident_Custom_Column_152.Value), "Nothing", True, Fields!Incident_Custom_Column_152.Value.IndexOf("/") )
方法2:嵌套IIF做安全校验
在else分支里再嵌套一层IIF,确保只有非空时才调用IndexOf:
=IIF( IsNothing(Fields!Incident_Custom_Column_152.Value), "Nothing", IIF(Fields!Incident_Custom_Column_152.Value IsNot Nothing, Fields!Incident_Custom_Column_152.Value.IndexOf("/"), -1) )
方法3:转换为字符串后调用方法
先把字段值转为字符串(空值会转为空字符串),空字符串调用IndexOf会返回-1,不会报错:
=IIF( IsNothing(Fields!Incident_Custom_Column_152.Value), "Nothing", CStr(Fields!Incident_Custom_Column_152.Value).IndexOf("/") )
内容的提问来源于stack exchange,提问作者Abdul Salam
相关产品推荐
相关产品推荐

