ASP.NET项目中RDLC报表IIF表达式出现异常问题求助
RDLC报表IIf表达式遇0值显示#Error的问题分析与解决
问题出在RDLC的IIf函数执行逻辑上——它不是短路求值,不管条件是否成立,IIf的两个分支表达式都会被计算。
你第一个表达式里,当Fields!Day.Value=0时,虽然条件>=1 And <=7不满足,但WeekdayName(Fields!Day.Value)还是会被执行。而WeekdayName要求参数必须是1-7的整数,传入0就会触发参数非法的错误,导致报表显示#Error。
而你第二个表达式的两个分支都是字符串常量,没有调用需要合法参数的函数,所以即使条件不成立,也不会出现错误,正常显示"invalid"。
解决办法有几种:
用Switch函数替代IIf:Switch会按顺序判断条件,找到第一个满足的条件后执行对应的表达式,后续分支不会被计算(相当于短路):
=Switch( Fields!Day.Value >= 1 And Fields!Day.Value <= 7, WeekdayName(Fields!Day.Value), True, "invalid" )添加报表自定义代码:在报表属性的「代码」标签页中添加一个处理函数,把判断逻辑封装起来:
Public Function GetWeekdayName(ByVal day As Integer) As String If day >= 1 And day <= 7 Then Return WeekdayName(day) Else Return "invalid" End If End Function然后在报表字段的表达式里调用这个函数:
=Code.GetWeekdayName(Fields!Day.Value)数据源层面预处理:在给报表提供数据的时候,提前对
Day字段做判断,把不合法的值直接替换成"invalid",报表直接绑定处理后的字段即可,这样报表表达式无需复杂判断。
内容的提问来源于stack exchange,提问作者Al Shahreyaj
相关产品推荐
相关产品推荐

