在SSRS报告中的自定义代码中拆分字符串

时间:2013-12-12 09:37:49

标签: vb.net reporting-services ssrs-2008

域\ X_User | X_User,域\ Y_User | Y_User,

我正在使用SSRS报告,我收到上述模式的值(它可能包含任意数量的用户),我试图在报告正文中编写一个可视化基本功能(自定义代码)来分割在字符串上面并返回以下值:

X_User,Y_User

我尝试在报告正文中编写此代码

Public Function SubString_Owner(X As String) As String

Dim OwnerArray() As String = Split(X, ",")

Dim Names As String

Dim i As Integer = 0

While i <= OwnerArray.Length - 1

     Dim NamesArr As String() = Split(OwnerArray(0), "|")

     Names = NamesArr(1) + ","

         i += 1

End While

Return Names
End Function

问题是当尝试使用索引拆分OwnerArray(i)时,它会给出错误,但是当使用像“零”OwnerArray(0)这样的固定值时,它构建正常,任何人都可以弄清楚为什么会这样? ?

1 个答案:

答案 0 :(得分:0)

字符串是否以逗号结尾,就像你提出的示例字符串一样?

如果是这种情况,那就是你的问题。

您的第一次拆分然后创建一个包含3个索引的数组

{"Domain\X_User|X_User", "Domain\Y_User|Y_User", ""}

(注意索引2中的空字符串)

如果你打算循环数组,你会经历3次,那里的分割对索引0和1都很好,导致{“Domain \ X_User”,“X_User”}和{“Domain \ Y_User” ,“Y_User”},但是拆分第三个索引,拆分的结果是一个空数组。

当您尝试检索NamesArr数组的第二个索引时,它将导致IndexOutOfRangeExeption。

你最好在循环中进行某种检查,以确保你可以实际分割你的价值:

Public Function SubString_Owner(X As String) As String

        Dim OwnerArray() As String = Split(X, ",")

        Dim Names As String

        Dim i As Integer = 0

        While i <= OwnerArray.Length - 1
            If Not String.IsNullOrEmpty(OwnerArray(i)) AndAlso OwnerArray(i).Contains("|") Then
                Dim NamesArr As String() = Split(OwnerArray(i), "|")

                Names &= NamesArr(1) & ","

            End If
            i += 1
        End While

        Return Names
    End Function

我在这里做2次检查,第一次确保提供的值不是Nothing(null),第二次检查它是否包含所需的“|”拆分它。如果值为Nothing,则第二个语句将给出NullReference错误。

另请注意,我编辑了

Names = NamesArr(1) + ","

Names &= NamesArr(1) & ","

您的语句将覆盖每个循环的名称,并且您只返回最后一个用户名。另外要在VB.NET中连接字符串,你应该使用“&amp;”而不是“+”

哦,为什么你没有使用FOR循环?它比While循环更具可读性,因此在这种情况下是首选。