Методы расширения выражений RDLC - PullRequest
9 голосов
/ 03 июля 2010

Можно ли написать методы расширения для выражений за полями RDLC?

Например, допустим, что в моем источнике данных есть поле DateTime, которое может иметь допустимое значение или может быть нулевым. Я перетаскиваю TextBox на мой RDLC и форматирую его значение с помощью метода ToShortDateString (). Это прекрасно работает для заполненного значения DateTime, но, очевидно, также вызовет исключение во время выполнения, если я попытаюсь сделать .ToShortDateString () для поля NULL.

Мне было интересно, смогу ли я написать метод расширения, который мог бы использовать в моих выражениях RDLC, чтобы при работе со значениями? DateTime я мог вызывать метод, подобный .ConvertFromNullToEmptyString ().

Конечно, есть другие способы обойти эту проблему, но мне было интересно, будут ли методы расширения для использования в выражениях RDLC возможным подходом к моей бизнес-проблеме.

Спасибо, ребята!

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Можно использовать методы расширения, но не методы расширения AS на экземпляре объекта.Вы должны будете вызывать их как статический вызов метода для типа, членом которого они являются.Поэтому вместо myDictionary.Values.Sum() - вызова метода Sum для свойства Values экземпляра словаря - вы можете использовать System.Linq.Enumerable.Sum(myDictionary.Values) - передачу экземпляра в статический метод Sum типа Enumerable(в этом примере отчет должен ссылаться на сборку System.Core).Так что да, вы можете использовать методы, которые также являются расширениями, но (в любом случае) не как расширения для конкретного экземпляра.

2 голосов
/ 19 сентября 2010

Да, это возможно.Вы можете встраивать код непосредственно в отчет или включать пользовательскую сборку

0 голосов
/ 22 сентября 2010

Хотя я согласен с Кориной в отношении решения этого вопроса, я считаю, что лучшее решение может быть достигнуто без соблюдения предложенного пути, используя встроенные выражения.В любом случае, когда у вас есть DateTime, исходящий из SQL, вы правы, он может быть нулевым, однако вы можете легко проверить это с помощью оператора IIF (помните, что выражения в основном находятся в VB) для проверки null / nothing / empty и, пока это что-то, запустите нужную операцию, в противном случае верните пустое значение.Только будьте осторожны, так как результирующий тип IIF, вероятно, будет строкой.

...