Сортировка по дате, которая может быть пустой в Telerik Reports - PullRequest
1 голос
/ 18 марта 2011

Наличие в отчете столбца с полем строковой даты в формате ММ / дд / гггг. Некоторые из этих столбцов могут содержать пустые строки. Возникла проблема с сортировкой раздела. У меня около 10 часов, чтобы сообщить телерику, поэтому я могу упустить что-то очевидное.

Сначала я попытался использовать выражение, подобное этому:

=IIf(Fields.ExpirationDate='', CDate('1/1/1990'), CDate(Fields.ExpirationDate))

Это выглядит правильно? Это бросило ошибку: Произошла ошибка при обработке отчета '': Не удалось сравнить два элемента в массиве.

------------- InnerException ------------- Произошла ошибка при выполнении функции CDate (). Проверьте InnerException для дальнейшего Информация. ------------- InnerException ------------- Исключение было сгенерировано целью вызова. ------------- InnerException ------------- Строка не была распознана как действительный DateTime.

Другой разработчик предложил использовать пользовательский метод, поэтому я создал файл report.cs

    public DateTime EmptyDateToNow( string expirationDate )
    {
        DateTime parsed;
        if (!DateTime.TryParse(expirationDate, out parsed))
            return DateTime.Now;

        return parsed;
    }

, а затем попытался вызвать с помощью = EmptyDateToNow (Fields.ExpirationDate)

и это выдает ошибку:

Произошла ошибка при обработке Отчет '': не удалось сравнить два элементы в массиве. ------------- InnerException ------------- Выражение содержит неопределенный вызов функции EmptyDateToNow ().

Ответы [ 2 ]

3 голосов
/ 12 июля 2011

public static DateTime EmptyDateToNow (строка expirationDate)

Я думаю, что Telerik Reporting хочет, чтобы ваши пользовательские функции были статическими.

Я думаю, что проблема с первым подходом заключается в том, что CDate (Fields.ExpirationDate) выполняется, даже если выражение является истинным, в результате чего вызывается исключение. Вы можете попробовать что-то вроде этого, чтобы получить желаемый результат без определения пользовательской функции:

=CDate(IIf(IsNull(Fields.ExpirationDate) Or Fields.ExpirationDate="", "1/1/1990", Fields.ExpirationDate))

Я понимаю, что это немного устарело, я просто хотел опубликовать на тот случай, если у кого-то возникнут проблемы с поиском.

0 голосов
/ 05 октября 2011

Сделайте пользовательскую функцию статической (и, если вызов все еще не выполнен, сделайте вызов полностью квалифицированным. Например, = Myclass.EmptyDateToNow (Fields.ExpirationDate)).
Заставьте функцию получить объект в качестве параметра (не строку или другой тип данных).
Внутри функции проверьте наличие нуля, а затем (не ноль) конвертируйте в нужный тип данных и работайте с ним.

...