VB.Net: Как использовать объектный источник данных в отчете (.rdlc)

Мой вопрос похож на этот но у меня проблемы с реальной реализацией.

У меня есть отчет (.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, который, кажется, указывает на то, что я выполняю правильные шаги, но свойства не отображаются так, как ожидалось

Открытые свойства класса теперь отображаются в окне Источники данных, откуда их можно перетащить в отчет.

Этого не происходит - свойства никогда не появляются

ИЗМЕНИТЬ: как указал Алекс, мне нужно использовать свойства, а не какие-либо методы. Пожалуйста, ознакомьтесь с ответом Алекса Эселфи ниже для уточнения. Это все еще не решило мою проблему, но приблизило меня на шаг ...


person Basic    schedule 15.09.2010    source источник


Ответы (2)


Судя по вашему описанию и сопутствующему коду, в классе ReportData нет свойств. Если я правильно считаю, этот класс должен генерировать IEnumerable, которые вы хотите отобразить в отчете.

В этом случае вам нужно будет выбрать класс Employee в качестве источника данных в мастере. Это позволит вам отображать данные в вашем отчете.

Я поработаю над небольшим проектом и через мгновение добавлю его к этому ответу.



Изменить 1

Как привязать класс к отчету

Visual Studio 2008

  1. Откройте отчет в режиме дизайна.
  2. Выберите в строке меню Data> Show Data Sources
  3. Нажмите Добавить новый источник данных в окне источников данных.
  4. Выберите Объект и нажмите Далее.
  5. Просмотрите дерево решений и выберите класс, к которому вы хотите выполнить привязку.
    В вашем случае вы выполняете привязку к классу Employee.
  6. Нажмите Далее, а затем Готово.


Visual Studio 2010

  1. Откройте отчет в режиме дизайна.
  2. Выберите в строке меню View> Report Data
  3. Щелкните New> Dataset... в окне "Источники данных".
  4. Введите имя для набора данных (например, Сотрудник)
  5. Создайте Новый источник данных или выберите существующий источник данных.

    Создание нового источника данных

    • Select Object and click Next.
    • Просмотрите дерево решений и выберите классы, к которым вы хотите выполнить привязку.
    • Нажмите Готово.


После привязки класса к отчету приступайте к созданию отчета как обычно.


Изменить 2

Я загрузил для вас образец проекта. Вот ссылка.
Если вам нужны дополнительные пояснения, сообщите мне, и я дам вам пошаговую процедуру тиражирования проекта.

person Alex Essilfie    schedule 15.09.2010
comment
Спасибо - вы имеете в виду, что это должно быть свойство, а не функция? Я был бы признателен за образец проекта, но я тоже его протестирую ... - person Basic; 15.09.2010
comment
Хорошо, изменение его на свойство продвинуло меня дальше - теперь я вижу дочерний элемент (GetEmployees ()) в источнике данных на панели источников данных, но его все еще нет в списке, когда я добавляю таблицу, и он запрашивает у меня набор данных - нужно ли мне что-то делать, чтобы использовать источник данных в качестве набора данных? - person Basic; 15.09.2010
comment
Это класс, к которому вы привязываете отчет. Когда класс привязан к отчету, его свойства становятся возможными полями для отображения в этом отчете. Поэтому вам придется привязать отчет к возвращаемому значению (в данном случае Employee). - person Alex Essilfie; 15.09.2010
comment
Я только что закончил образец проекта. Вы хотите, чтобы я загрузил весь проект или я должен просто отредактировать свой ответ, чтобы отобразить суть проекта. - person Alex Essilfie; 15.09.2010
comment
Привет, Алекс, ты можешь уточнить, как мне привязать отчет? Я не вижу ничего в панели свойств, что кажется применимым ... - person Basic; 15.09.2010
comment
Basiclife, какую версию VS вы используете? 2008/2010? - person Alex Essilfie; 15.09.2010
comment
Извините за задержку. Мое интернет-соединение прервалось. Я обновил ответ, чтобы показать, как привязать класс к отчету. - person Alex Essilfie; 15.09.2010
comment
Привет, Алекс, не проблема ... Если я покажу источники данных, я получу окно источников данных с очень маленьким деревом (Отчеты - ›ReportData -› GetEmployees). Нет новой опции. У меня есть следующие кнопки: Добавить новый источник данных (не установлен). Обновить. Серым цветом выделены: редактировать набор данных с помощью конструктора и настраивать источник данных с помощью мастера. Они остаются серыми независимо от того, какой узел выбран. В меню VS Data я снова добавляю новый источник данных, но не упоминаю набор ... - person Basic; 15.09.2010
comment
Я загрузил снимок экрана здесь: img25.imagevenue.com/img.php? image = 65460_UI_122_6lo.jpg - person Basic; 15.09.2010
comment
Увидев ваш снимок экрана, я думаю, что лучше всего загрузить образец проекта. Простите за опоздание. У меня сегодня плохое интернет-соединение. - person Alex Essilfie; 15.09.2010
comment
Basiclife, извините, я допустил небольшую ошибку в процедуре добавления источника данных в VS2010. См. Обновленный ответ для исправленной версии. - person Alex Essilfie; 15.09.2010
comment
+1 Alex - Большое спасибо за вашу помощь в этом. Вы мне очень помогли, и я очень ценю приведенные выше пошаговые инструкции. Теперь мне удалось добавить данные в свой отчет. У меня все еще есть вопросы, но вы ответили на этот - я открою новые в течение следующего дня или около того. - person Basic; 16.09.2010
comment
Без проблем. В прошлом месяце мне пришлось изучать MS Reports самостоятельно, без какой-либо посторонней помощи, поэтому я стараюсь не позволять никому проходить через этот опыт. В конце концов, знания предназначены для обмена. - person Alex Essilfie; 16.09.2010
comment
Спасибо. Если вам интересно, следующий вопрос находится здесь: stackoverflow.com/questions/3726658/ - person Basic; 16.09.2010

У меня такая же проблема. Мне пришлось добавить источник данных (тип объекта) к моему уровню представления, который указывал на мой объект на бизнес-уровне (коллекция с классом свойств). Я создал отчет (.rdlc) на уровне представления и указал его на источник данных, и все работает нормально. Это был единственный способ представить свойства поля в отчете. Во время выполнения я привязываю источник данных отчета к коллекции. Мне нравится создавать «плоскую» коллекцию на бизнес-уровне, обрабатывать данные и отправлять их в rdlc, сохраняя отчет как можно более «тупым».

person R Putnam    schedule 28.12.2011
comment
Я не мог согласиться с этим - я бы хотел переложить некоторые сложные вещи в отчет (что логично), но кажется, что попытка чего-то большего, чем тупой набор данных, - это рецепт катастрофы - определенно область MS. стек, который требует капитального ремонта. Вы должны увидеть накладные расходы, когда я прошу механизм отчетов сгруппировать / отсортировать, в отличие от простого запроса Linq ... - person Basic; 19.01.2012