Мой вопрос похож на этот , но у меня возникли некоторые проблемы с реальной реализацией.
У меня есть отчет (.rdlc) на бизнес-уровне 3-уровневого приложения.
У меня есть объект в BL (EmployeeManager
), у которого есть метод GetEmployees(Expression as Expression(Of Func(Of Employee, Boolean))) As IQueryable(Of Employee)
.
Поскольку я не хотел напрямую передавать лямбду (по крайней мере, до тех пор, пока у меня что-то не заработало), я создал класс ReportData
в BL, который оборачивает вызов GetEmployees()
и представляет результаты как IEnumerable (Of Employee) - что должно быть очень просто. У него даже нет параметров на данный момент.
Хорошо ... Итак, в своем отчете я попытался добавить новый источник данных. Я выбрал тип Object
и обнаружил класс ReportData
, упомянутый выше. Мастер завершает работу и добавляет в проект папку DataSources, которая представляет собой некоторый XML-код, определяющий <GenericObjectDataSource>
и указывающий на класс Report
.
ReportData
также отображается на панели «Источники данных» - рядом с ним >
, но когда я его расширяю, у него нет дочерних элементов.
Что я не знаю, как это сделать, так это ИСПОЛЬЗОВАТЬ источник данных - Кажется, он не предоставляет никаких методов / членов (я даже не указал, что он должен вызывать GetEmployees()
!) IEnumerable(Of Employee)
нигде не видно.
Когда я пытаюсь добавить таблицу в отчет, и он предлагает мне выбрать набор данных, источник данных ReportData не отображается в раскрывающемся списке Источник данных.
Что мне не хватает? Может кто-нибудь указать мне правильное направление?
Мой простой объект ReportData:
Namespace Reports
Public Class ReportData
Private Property EmployeeManager As Interfaces.IEmployeeManager
Public Sub New()
''This sub is here in case it's an instantiation problem - I intend to use dependency injection when I've got this working properly.
Me.EmployeeManager = New EmployeeManager
End Sub
Public Sub New(ByVal EmployeeManager As Interfaces.IEmployeeManager)
Me.EmployeeManager = EmployeeManager
End Sub
Public Function GetEmployees() As IEnumerable(Of Employee)
Return EmployeeManager.GetEmployees()
End Function
End Class
End Namespace
Я также нашел это , которое, кажется, указывает на то, что я выполняю правильные шаги, но свойства не отображаются должным образом
Открытые свойства класса теперь отображаются в окне Источники данных, откуда их можно перетаскивать в отчет.
Этого не происходит - свойства никогда не появляются
EDIT : Как указал Алекс, мне нужно использовать properties , а не просто какие-либо методы. Пожалуйста, смотрите ответ Алекса Эсфили ниже для уточнения. Это все еще не решило мою проблему, но сделало меня на шаг ближе ...