Мой вопрос похож на этот но у меня проблемы с реальной реализацией.
У меня есть отчет (.rdlc) на бизнес-уровне трехуровневого приложения.
У меня есть объект в 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
Я также нашел this, который, кажется, указывает на то, что я выполняю правильные шаги, но свойства не отображаются так, как ожидалось
Открытые свойства класса теперь отображаются в окне Источники данных, откуда их можно перетащить в отчет.
Этого не происходит - свойства никогда не появляются
ИЗМЕНИТЬ: как указал Алекс, мне нужно использовать свойства, а не какие-либо методы. Пожалуйста, ознакомьтесь с ответом Алекса Эселфи ниже для уточнения. Это все еще не решило мою проблему, но приблизило меня на шаг ...