Vb.net ReportViewer IIF表达式返回#错误
我花了两天的时间来解决这个问题,但是运气不好。 我有一个IIF表达式,它在条件变为真(IPmt计算)时显示正确的值,但else总是返回#error,尽管它应该仅为0Vb.net ReportViewer IIF表达式返回#错误,vb.net,reportviewer,Vb.net,Reportviewer,我花了两天的时间来解决这个问题,但是运气不好。 我有一个IIF表达式,它在条件变为真(IPmt计算)时显示正确的值,但else总是返回#error,尽管它应该仅为0 =IIf(Fields!PaymentNumber.Value<>0, IPmt(Fields!Annual_Interest_Rate.Value/1200,Fields!PaymentNumber.Value,Fields!Payment.Value,Fields!Total_Amount_Financed
=IIf(Fields!PaymentNumber.Value<>0,
IPmt(Fields!Annual_Interest_Rate.Value/1200,Fields!PaymentNumber.Value,Fields!Payment.Value,Fields!Total_Amount_Financed.Value),
0)
=IIf(字段!PaymentNumber.Value0,
IPmt(字段!年利率.值/1200,字段!付款编号.值,字段!付款.值,字段!总金额.值),
0)
所有字段都有值(不能为空)
这是什么原因造成的
谢谢,错误是因为始终计算真实条件,并在PaymentNumber=0时返回错误。根据文档,IIF表达式的两个条件都会被计算。您可以通过切换顺序来测试这一点:
=IIf(Fields!PaymentNumber.Value=0, 0,
IPmt(Fields!Annual_Interest_Rate.Value/1200,Fields!PaymentNumber.Value,Fields!Payment.Value,Fields!Total_Amount_Financed.Value))
我过去所做的是在“自定义代码”中创建一个函数。我没有使用IPmt,但我相信这应该可以:
Function CalcIpmt(Annual_Interest_Rate As Decimal, PaymentNumber As Integer, Payment As Decimal, Total_Amount_Financed As Decimal) As Decimal)
If PaymentNumber = 0 Then
Return 0
Else
Return IPmt(Annual_Interest_Rate, PaymentNumber, Payment, Total_Amount_Financed)
End If
End Function
那么你的表达是:
=Code.CalcIpmt( Fields!Annual_Interest_Rate.Value/1200, Fields!PaymentNumber.Value, Fields!Payment.Value, Fields!Total_Amount_Financed.Value )
(注意:我还没有对此进行测试,您需要检查数据类型)已解决!IIF表达式计算导致的问题。vb.net还尝试计算真假情况。如果PaymentNumber为0,则IPmt返回#Error(除以零)。解决方案:当PaymentNumber等于0时,在IPmt中将PaymentNumber设置为1(或除0以外的其他值)。d'OH刚刚在下面完成了我的回答。很高兴你明白了。