Ответ 1
Ошибка, которую вы получили, не имеет ничего общего с форматированием, это сбой преобразования в Double
. Таким образом, ваше выражение работает идеально, если ваше поле полностью состоит из цифровых символов. Однако у вас есть некоторые данные с нечисловыми символами, в результате чего функция Convert.ToDouble()
выдает ошибку.
К сожалению, это не может быть решено с помощью выражения IIF
потому что IIF
является функцией, а не языковой конструкцией, поэтому оба параметра - true и false - оцениваются перед передачей в функцию независимо от значения параметра логического условия. Это означает, что:
=IIF(IsNumeric(Fields!Phone.Value), Format(Convert.ToDouble(Fields!Phone.Value), "(000)000-0000"), Fields!Phone.Value)
всегда будет пытаться преобразовать удвоение независимо от результата функции IsNumeric
. Есть два способа решить эту проблему:
Используйте Val вместо ToDouble
Проблема с ToDouble
- это ошибки, когда преобразуемая строка является неподходящей формой; Val
не имеет этой проблемы - он просто берет все числа, которые может. Так что теперь мы можем использовать выражение:
=IIF(Fields!Phone.Value Is Nothing,
Nothing,
IIF(IsNumeric(Fields!Phone.Value),
Format(Val(Fields!Phone.Value), "(###)###-####"),
Fields!Phone.Value)
)
Это выражение возвращает Nothing
если поле имеет значение Null
, проверяет, является ли оно числовым, и если да, преобразует его в число и форматирует его, в противном случае оно просто возвращает то, что находится в поле.
Обратите внимание, что функция Val
по-прежнему выполняется, даже если поле не является числовым, но это выражение выполняется успешно, поскольку функция Val
не вызывает ошибок, таких как ToDouble
. Мы просто делаем расчет и отбрасываем результат.
Пользовательский код
В меню " Report
выберите " Report Properties...
и перейдите на вкладку " Code
". Вставьте следующий код:
Function FormatPhone(Phone AS String) AS String
IF (Phone Is Nothing) Then
Return Nothing
Else If (IsNumeric(Phone)) Then
Return Format(Convert.ToDouble(Phone), "(###)###-####")
Else
Return Phone
End If
End Function
Используйте следующее выражение в ячейке вашего номера телефона:
=Code.FormatPhone(Fields!Phone.Value)