VB.Net: Как использовать источник данных объекта в отчете (.rdlc) - PullRequest
2 голосов
/ 15 сентября 2010

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

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

Ответы [ 2 ]

4 голосов
/ 15 сентября 2010

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

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

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

1012 *
*


Редактировать 1

Как связать класс с отчетом

Visual Studio 2008

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


Visual Studio 2010

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

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

    • Выберите Объект и нажмите Далее .
    • Просмотрите дерево решений и выберите класс (ы), к которым вы хотите привязаться.
    • Нажмите Готово .


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


Редактировать 2

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

1 голос
/ 28 декабря 2011

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

...