Исключение было выбрано целью вызова
-
16-10-2019 - |
Вопрос
Я знаю, что это относительно распространенная ошибка, но я работаю в приложении, которое позволяет записывать пользовательские отчеты с помощью сценариев VB.NET или C#. Обработка ошибок очень плохая, и я недостаточно осведомлен, чтобы добавить свой собственный (если это даже возможно).
Мой код просто получает значение, которое хранится в текстовом поле в отчете, отформатированном как Фамилия Имя и усекает всех персонажей после запятой. Это значение Фамилия помещается в новый текстовый поток в отчете. Вот мой код:
Sub Detail1_Format
Dim lastNameFirstName As String = ""
Dim lastName As String = ""
Dim lastNameCommaIndex As Integer=
'set lastNameFirstName value from data on report'
lastNameFirstName = ReportUtilities.ReturnTextBoxValue(rpt,"Detail1","txtdtr_DTOOLS_CompanyName")
'find index of first comma in lastNameFirstName string'
lastNameCommaIndex = lastNameFirstName.IndexOf(",")
'set contents of lastName using substring of lastNameFirstString'
lastName = lastNameFirstName.SubString(0, lastNameCommaIndex)
'the error happens above when I use lastNameCommaIndex'
'to set the number of characters in my substring'
'set client name textbox value using lastName'
ReportUtilities.SetTextBoxValue(rpt,"Detail1","txtdtr_CALC_ClientName",lastName)
End Sub
Ошибка происходит, когда я использую FastnameCommainDex, чтобы установить количество символов в моей подстроке. Если я заменяю его на число, отчет опубликован должным образом.
Решение
Вы можете использовать string.split это сделает это намного проще
например
If Not String.IsNullOrWhiteSpace(lastNameFirstName) Then
lastName = lastNameFirstName.Split(",".ToCharArray())(0)
End If
Вот как вы пишете IsnullorWritespace, если у вас нет .NET 4.0
Function IsNullOrWhiteSpace(ByVal s As String) As Boolean
If s Is Nothing Then
Return True
End If
Return s.Trim() = String.Empty
End Function