При использовании средства просмотра отчетов и запросе источника данных мой класс доступа к данным не отображается

Я новичок в использовании элемента управления просмотра отчетов.

В настоящее время я создаю отчет, вызывая хранимую процедуру и вставляя входные параметры для запроса таблицы в базе данных и возврата списка строк.

Строки вставляются в таблицу данных, и таблица данных возвращается.

Таблица данных привязана к представлению сетки, которое может просматривать пользователь.

Теперь моя проблема....

Я хотел бы использовать средство просмотра отчетов для отображения данных вместо сетки, чтобы пользователи могли легко экспортировать данные и просматривать с ними красивый график.

Хранимая процедура вызывается из моего класса доступа к данным, который является просто классом, который у меня есть в моем проекте (он не находится в папке).

Когда я иду, чтобы создать средство просмотра отчетов, и меня спрашивают о моем источнике данных, мой класс доступа к данным не отображается. Как я могу получить результаты (возвращенную таблицу данных) из функции хранимой процедуры, чтобы их можно было вставить в средство просмотра отчетов?


person Telecaster    schedule 07.11.2012    source источник


Ответы (2)


Вы можете попробовать программный подход,

//Load Report Definition.
// From File.
ReportViewer1.LocalReport.ReportPath = "C:\\Report.rdlc";
//Load Report Data.
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", data));
//Refresh Control.
ReportViewer1.LocalReport.Refresh();

Если у вас есть таблица данных с вашими данными, вы просто добавляете ее в ReportViewer как источник данных. «DataSet1» — это имя набора данных в отчете, загруженном в данный момент в средство просмотра отчетов.

Итак, если бы вы использовали Entity Framework, это было бы так.

//Create Connection.
Entities db = new Entities();

//Get the Data Using the query supplied (Where Entities.SomeObject is the Entity to retrieve data).
IQueryable<Object> data = db.CreateQuery<Object>("SELECT VALUE c FROM Entities.SomeObject AS c WHERE c.SomeValue> 0");

//Reset Control. Doesn't Usually work if this is skipped for some reason.
ReportViewer1.Reset();
//Load Report Definition.
// From File.
ReportViewer1.LocalReport.ReportPath = "C:\\Report.rdlc";
//Load Report Data.
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", data));
//Refresh Control.
ReportViewer1.LocalReport.Refresh();

То же самое должно работать для DataTable.

person Shelby115    schedule 07.11.2012
comment
Хорошо, я вижу, что вы делаете, программно устанавливая источник данных, но что вы делаете, когда вы устанавливаете путь отчета к местоположению на диске C? - person Telecaster; 08.11.2012
comment
Здесь находится мой файл отчета (.rdlc), так что вы можете сделать ReportViewer1.LocalReport.ReportPath = Server.MapPath("~/Reports/Report1.rdlc");, чтобы загрузить отчет, который находится в папке отчетов, непосредственно в вашем проекте. Я установил это для простоты, потому что у меня есть несколько проектов, и я использую одни и те же отчеты для тестирования всех из них, поэтому вместо того, чтобы иметь несколько их копий, я просто сохраняю их на диск C. - person Shelby115; 08.11.2012
comment
Так что мне нужно не только программно установить источник данных, я также должен иметь отчет, уже созданный в папке, и указать на него ReportViewer1. Может ли мой отчет быть пустым и будет ли он знать, как обращаться с источником данных? Или я должен также программно создать какой-то контейнер, такой как gridview, в отчете и также указать его на источник данных. - person Telecaster; 08.11.2012
comment
ReportViewer — это просто элемент управления, который отображает отчеты. Отчет — это структура, в которой отображаются ваши данные (она сохраняется в виде файла .rdlc), а источник данных — это данные, которые поставляются в ваш отчет. Таким образом, ReportViewer отображает данные DataSource, используя структуру, предоставленную определением отчета (.rdlc). Если так станет понятнее. - person Shelby115; 08.11.2012

Что я в конечном итоге сделал, чтобы средство просмотра отчетов получило доступ к моей таблице данных, так это добавило набор данных в мой проект. В этом наборе данных мне пришлось создать таблицу данных с теми же именами столбцов, что и в моей таблице данных, сгенерированной кодом. Оттуда я перешел к своему отчету, добавил таблицу и указал ее на таблицу данных, которая была создана в наборе данных. Затем в свой код я программно добавил таблицу данных, используя описанный выше код от Shelby.

person Telecaster    schedule 08.11.2012