在调用 GetValue() 之前使用 IIF() 来检查拆分字符串的长度,仍然是错误的

To use IIF() for checking a length of spliited string before calling GetValue(), is still error

在 rdlc 报告中。为从主报告接收的 4 个参数创建了一个子报告。 但有时一个主要报告可能会发送少于四个值。 例如:从这些 VB.Net 代码发送了一个字符串。

Dim strProcessCode As String = {"A,B"}

一个字符串只包含两个值。(A和B) 所以我通过对每个参数使用表达式来拆分这个字符串

=iif(Split(Parameters!pProcessCode.Value, ",").Length>0,
           (Split(Parameters!pProcessCode.Value, ",")).GetValue(0)
           ,nothing)   ''For first parameter

第一个和第二个参数没问题。但是当我为第三个参数准备值时出现问题。尽管它使用相同的方式。

    =iif(Split(Parameters!pProcessCode.Value, ",").Length>2,
           (Split(Parameters!pProcessCode.Value, ",")).GetValue(2)
           ,nothing)   ''For third parameter

显示此错误消息

Error: Subreport could not shown.

如何解决?

如果你能把它分解成 If.. ElseIF.. ElseSelect 会更容易阅读和维护。

Function ReturnResult(byval pProcessCodeValue as string) as string
    If Instr(0, pProcessCodeValue,",",vbTextCompare) = 0 Then
       ReturnResult = pProcessCodeValue
       Exit Function
    End If 
    dim arr() as string
    arr = Split(pProcessCodeValue , ",")
    ReturnResult = arr(arr.Length)
End Function

称呼它:

=ReturnResult(Parameters!pProcessCode.Value)

但是,对于 SSRS,您可能需要使用嵌套的 IIF,例如:

=iif(Split(Parameters!pProcessCode.Value, ",").Length = 0,
       (Split(Parameters!pProcessCode.Value, ",")).GetValue(0)
       , iif(Split(Parameters!pProcessCode.Value, ",").Length = 1,
       (Split(Parameters!pProcessCode.Value, ",")).GetValue(1)
       , iif(Split(Parameters!pProcessCode.Value, ",").Length = 2,
       (Split(Parameters!pProcessCode.Value, ",")).GetValue(2)
       , nothing)) 
    )