ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual...

26
ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов и элементы управления ReportViewer , которые позволяют добавлять полнофункциональные отчеты в пользовательские приложения. Отчеты могут содержать данные в различных формах, например в виде таблицы. Предоставляемые элементы управления ReportViewer позволяют обрабатывать и отображать отчеты в приложениях. Использовать эти элементы управления можно как в проектах приложений Windows, так и в веб-проектах. Добавить ReportViewer можно на страницу или на форму в приложении из области элементов в разделе Отчёт , а с помощью панели смарт-тегов и свойств можно настроить элемент управления и привязать отчет . Рис. 1. Окно запущенного приложения с элементом ReportViewer . Рис. 2. Редактор дизайна формы. Панель смарт-тегов элемента ReportViewer .

Transcript of ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual...

Page 1: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

ReportViewer.

Microsoft Visual Studio 2013 поддерживает функции создания отчетов и элементы управления ReportViewer, которые позволяют добавлять полнофункциональные отчеты в пользовательские приложения. Отчеты могут содержать данные в различных формах, например в виде таблицы. Предоставляемые элементы управления ReportViewer позволяют обрабатывать и отображать отчеты в приложениях. Использовать эти элементы управления можно как в проектах приложений Windows, так и в веб-проектах. Добавить ReportViewer можно на страницу или на форму в приложении из области элементов в разделе Отчёт, а с помощью панели смарт-тегов и свойств можно настроить элемент управления и привязать отчет.

Рис. 1. Окно запущенного приложения с элементом ReportViewer.

Рис. 2. Редактор дизайна формы. Панель смарт-тегов элемента ReportViewer.

Page 2: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Элемент управления ReportViewer отображает только один отчет в любой момент времени. Если нужно просматривать несколько отчетов одновременно, можно использовать несколько экземпляров элемента управления или при помощи кода в одном элементе сменять отчёты, размещая по одному в каждый момент времени.

Простой пример использования.

Создайте новый проект Windows Forms на языке Visual C# с именем TestReportViewer.

Добавьте в решение новый проект (слой) Class Library с именем Business.

Рис. 3. Окно Solution Explorer. Пункт меню добавления нового проекта в решение.

Рис. 4. Окно добавления нового проекта в решение.

Page 3: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

В добавленном проекте измените файла класса на BusinessObjects.cs, нажав правой кнопкой на файл и выбрав пункт меню Rename(Переименовать).

Рис. 5. Окно Solution Explorer. Пункт меню Rename(Переименовать).

Замените код этого файла на следующий:

using System;

using System.Collections.Generic;

namespace TestReportViewer.Business

{

public class Product

{

private string m_name;

private int m_price;

public Product(string name, int price)

{

m_name = name;

m_price = price;

}

public string Name

{

get

{

return m_name; }

}

public int Price

{

get

{

return m_price;

}

}

}

public class Merchant

Page 4: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

{

private List<Product> m_products;

public Merchant()

{

m_products = new List<Product>();

m_products.Add(new Product("Pen", 25));

m_products.Add(new Product("Pencil", 30));

m_products.Add(new Product("Notebook", 15));

}

public List<Product> GetProducts() {

return m_products;

}

}

}

В главном проекте добавьте ссылку на созданный слой Business, кликнув правой кнопкой по элементу проекта References и выбрав пункт Add Reference. В появившемся окне в разделе Solution(Решение) выберите слой Business.

Рис. 6. Окно Solution Explorer. Пункт меню добавления ссылки в проект.

Рис. 7. Окно Reference Manager. Выбор слоя Business.

Page 5: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Обязательно откомпилируйте решение, чтобы элементу ReportViewer стал доступен созданный класс. Для этого кликните правой кнопкой на название решения и выберите пунктBuild Solution(Построить решение).

Рис. 8. Окно Solution Explorer. Компиляция решения.

Из панели элементов перетащите на форму элемент ReportViewer из раздела Reporting(Отчетность). Откройте панель смарт-тегов и выберите пункт Design a new report (Дизайн нового отчета).

Рис. 9. Редактор дизайна формы. Выбор пункта меню Design a new report (Дизайн новогоотчета).

Page 6: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

В появившемся окне выберите тип данных Object(Объект) и нажмите кнопку Next(Следующий).

Рис. 10. Окно Data Source Configuration Wizard. Выбор типа данных Object(Объект).

В слое Business отметьте класс Product для отображения в отчёте и нажмите кнопку Finish(Завершить).

Рис. 11. Окно Data Source Configuration Wizard. Выбор класса Product для отображения вотчёте.

Page 7: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

В следующем окне вы увидите добавленные слой Business, класс Product и его открытые свойства Name и Price. Нажмите кнопку Next(Следующий).

Рис. 12. Окно Report Wizard. Добавленные в отчёт классы и их открытые свойства.

Перетащите в Row groups(Группы строк) поле Name, а в группу Values(Значения) поле Price. Уберите флажок с функции Sum и нажмите кнопку Next(Следующий).

Рис. 13. Окно Report Wizard. Настройка групп строк и значений.

Page 8: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов
Page 9: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Настройте шаблон вывода таблицы по своему усмотрению и нажмите кнопку Next(Следующий).

Рис. 14. Окно Report Wizard. Настройка шаблона вывода таблицы.

Выберите стиль отображения таблицы и нажмите кнопку Finish(Завершить).

Рис. 15. Окно Report Wizard. Выбор стиля отображения таблицы.

Page 10: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

В панели смарт-тегов элемента ReportViewer выберите созданный отчёт.

Рис. 16. Редактор дизайна формы. Выбор созданного отчёта в элементе ReportViewer.

В коде формы подключите слой Business, добавив строчку:

using TestReportViewer.Business;

А в обработчике открытия формы замените код на следующий:

private void Form1_Load(object sender, EventArgs e)

{

Merchant m_merchant = new Merchant();

this.ProductBindingSource.DataSource = m_merchant.GetProducts();

this.reportViewer1.RefreshReport();

}

Запустите приложение.

Рис. 17. Запущенное приложение.

Page 11: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Пример создания вложенных отчётов.

Создайте стандартный проект WIS со слоями представление, бизнес, база и предпочтения с именем ReportViewerSubreports. Укажите базе данных имя ReportViewerSubreports и создайте две таблицы: Authors (авторы альбомов - список людей) и Albums (альбомы со ссылками на авторов из первой таблицы). Код определений таблиц базы данных:

Author.cs:using System.ComponentModel.DataAnnotations;

namespace ReportViewerSubreports.DataBase.Definitions

{

public class Author

{

[Key]

public int ID { get; set; }

public bool Flag_Deleted { get; set; } public string Name { get; set; }

public int Age { get; set; }

}

}

Album.cs:using System.ComponentModel.DataAnnotations;

namespace ReportViewerSubreports.DataBase.Definitions

{

public class Album

{

[Key]

public int ID { get; set; } public bool Flag_Deleted { get; set; }

public string Title { get; set; }

public int Price { get; set; }

public int AuthorID { get; set; }

public virtual Author Author { get; set; }

}

}

Код файлов из слоя Business:

Authors.cs:using ReportViewerSubreports.DataBase;

using ReportViewerSubreports.DataBase.Definitions;

using System.Data;

using System.Linq;

namespace ReportViewerSubreports.Business

{

public class Authors

{

Author_oper AuthorsDL;

public Authors()

{

AuthorsDL = new Author_oper();

}

public DataTable GetAuthorsDT() {

DataTable dt = new DataTable();

Page 12: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

dt.Columns.Add("ID", typeof(int));

dt.Columns.Add("Name", typeof(string));

dt.Columns.Add("Age", typeof(int));

DataRow dr;

foreach (Author author in AuthorsDL.GetList().ToList())

{

dr = dt.NewRow();

dr["ID"] = author.ID;

dr["Name"] = author.Name;

dr["Age"] = author.Age; dt.Rows.Add(dr);

}

return dt;

}

}

}

Albums.cs:using ReportViewerSubreports.DataBase;

using ReportViewerSubreports.DataBase.Definitions;

using System.Data;

using System.Linq;

namespace ReportViewerSubreports.Business

{

public class Albums

{

Album_oper AlbumsDL;

public Albums()

{

AlbumsDL = new Album_oper();

}

public DataTable GetAlbumsDT() {

DataTable dt = new DataTable();

dt.Columns.Add("ID", typeof(int));

dt.Columns.Add("Title", typeof(string));

dt.Columns.Add("Price", typeof(int));

dt.Columns.Add("AuthorID", typeof(int));

DataRow dr;

foreach (Album album in AlbumsDL.GetList().ToList())

{

dr = dt.NewRow(); dr["ID"] = album.ID;

dr["Title"] = album.Title;

dr["Price"] = album.Price;

dr["AuthorID"] = album.AuthorID;

dt.Rows.Add(dr);

}

return dt;

}

}

}

Page 13: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Рис. 18. Окно Solution Explorer. Структура созданного проекта.

Откомпилируйте и запустите проект. Любым способом проверьте работоспособность базы, на сервере должна создаться база с именем ReportViewerSubreports. Добавьте в обе таблицылюбые демо данные.

Page 14: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

К основному проекту добавьте два отчёта с именами Report_Authors.rdlc (отчёт по авторам)и Report_Albums.rdlc (отчёт по альбомам).

Рис. 19. Окно Add New Item добавления нового элемента в проект.

В редакторе откройте файл отчёта по авторам Report_Authors. Откройте окно Report Data, если оно ещё не открыто, выбрав в главном верхнем меню пункт View – Report Data. В этом окне кликните правой кнопкой по пункту Datasets (наборы данных) и выберите пункт меню Add Dataset (добавить набор данных).

Рис. 20. Окно Report Data. Команда добавления набора данных.

Page 15: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Выберите тип данных Database (из базы данных) и нажмите кнопку Next(Следующий).

Рис. 21. Окно Data Source Configuration Wizard. Выбор типа данных набора.

Выберите тип модели базы данных Dataset (множество данных) и нажмите кнопку Next(Следующий).

Рис. 22. Окно Data Source Configuration Wizard. Выбор типа модели базы данных.

Page 16: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Нажмите кнопку New Connection (Новое соединение).

Рис. 23. Окно Data Source Configuration Wizard. Настройка соединения.

В поле Data source выберите Microsoft SQL Server (SqlClient). В поле Server name выберите свой сервер базы данных, на котором хранится база созданного проекта. В разделе Connect to a database выберите пункт Select or enter a database name и укажите имя базы данных ReportViewerSubreports и нажмите кнопку OK.

Рис. 24. Окно Add Connection добавления соединения.

Page 17: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Нажимайте кнопку Next (Следующий), пока не откроется окно выбора объектов базы данных. Выберите таблицы Authors (авторы) и Albums (альбомы) и нажмите кнопку Finish (Завершить).

Рис. 25. Окно Data Source Configuration Wizard. Выбор объектов базы данных.

Укажите имя DataSet_Authors подключаемому множеству данных. Выберите множество данных Authors. Нажмите кнопку OK.

Рис. 26. Окно Dataset Properties. Настройка множества данных для отчёта авторов.

Page 18: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Для отчёта Report_Albumb добавьте множество данных, укажите имя DataSet_Albums, ресурс ReportViewerSubreportsDataSet, множество данных Albums, и нажмите кнопку ОК.

Рис. 27. Окно Dataset Properties. Настройка множества данных для отчёта альбомов.

Рис. 28. Окна Report Data для отчётов Report_Authors (слева) и Report_Albums (справа).

Page 19: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

В отчёте с авторами Report_Authors создайте следующую таблицу:

Рис. 29. Редактор отчёта Report_Authors. Созданная таблица.

В оставшейся ячейке кликните правой кнопкой и выберите пункт Insert (Вставить) –> Subreport (Подотчёт).

Рис. 30. Редактор отчёта Report_Authors. Добавление подотчёта в ячейку таблицы.

Page 20: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Ещё раз кликните правой кнопкой по ячейке с подотчётом и выберите пункт Subreport Properties.

Рис. 31. Редактор отчёта Report_Authors. Пункт меню настроек подотчёта.

В поле Name впишите имя подотчёта Subreport_Albums, а в поле Use this report as a subreport (Использовать этот отчёт как подотчёт) впишите имя второго отчёта Report_Albums, который будет использоваться как подотчёт в текущем отчёте.

Рис. 32. Окно Subreport Properties. Задание имён для подотчёта.

Page 21: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

В разделе Parameters нажатием на кнопку Add добавьте параметр с именем AuthorID и значением [ID], который будет передаваться каждому подотчёту. Нажмите кнопку ОК.

Рис. 33. Окно Subreport Properties. Настройка передаваемых подотчёту параметров.

В отчёте с альбомами Report_Albums создайте следующую таблицу:

Рис. 34. Редактор отчёта Report_Albums. Таблица для отчёта с альбомами.

Page 22: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

В окне Report Data кликните правой кнопкой по пункту Parameters и выберите пункт Add Parameter.

Рис. 35. Окно Report Data. Команда добавления параметра для отчёта.

В поле Name укажите имя параметра AuthorID, в поле Data type выберите тип поля Integer (целочисленный) и нажмите кнопку ОК.

Рис. 36. Окно Report Parameter Properties. Настройка добавляемого параметра отчёта сальбомами.

Page 23: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Кликните правой кнопкой по строке со значениями в таблице и выберите пункт Tablix Properties (Свойства таблицы). В этом же меню в пункте Row Group -> Group Properties есть раздел Page Breaks, в котором можно настроить разрыв страницы для элементов группы. Таким образом можно разбить таблицу на несколько страниц, в каждой из которых будет выводиться очередной элемент группы.

Рис. 37. Редактор отчёта Report_Albums. Пункт меню свойств таблицы.

В разделе Filters нажатием кнопки Add добавьте фильтр. Выберите в пункте Expression полеальбома AuthorID. Укажите в пункте Value только что созданный параметр [@AuthorID], нажав на кнопку справа и воспользовавшись мастером формирования выражений. Нажмите на кнопку ОК.

Рис. 38. Окно Tablix Properties. Добавление фильтра для таблицы в отчёте с авторами.

Page 24: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

В редакторе формы перетащите с панели инструментов элемент ReportViewer. В смарт-панели выберите команду Dock in Parent Container, чтобы растянуть элемент на всю поверхность формы.

Рис. 39. Редактор главной формы. Добавление элемента ReportViewer на форму.

В смарт-панели в пункте Choose Report (Выбрать отчёт) выберите ReportViewerSubreports.Report_Authors.rdlc - отчёт с авторами. Внизу появятся элементы, связывающие отображаемый отчёт с данными. Чтобы их обновить, нужно удалить их и в смарт-панели выбрать пункт Rebind Data Sources.

Рис. 40. Редактор главной формы. Выбор отображаемого отчёта в элементе ReportViewer.

Page 25: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Измените код главной формы следующим образом:

using Microsoft.Reporting.WinForms;

using ReportViewerSubreports.Business;

using System;

using System.Windows.Forms;

namespace ReportViewerSubreports

{

public partial class MainForm : Form

{

Authors AuthorsBL;

Albums AlbumsBL;

ReportDataSource AlbumsDataSource;

public MainForm()

{

InitializeComponent();

AuthorsBL = new Authors();

AlbumsBL = new Albums();

}

private void MainForm_Load(object sender, EventArgs e)

{ this.AuthorsBindingSource.DataSource = AuthorsBL.GetAuthorsDT();

AlbumsDataSource = new ReportDataSource("DataSet_Albums",

AlbumsBL.GetAlbumsDT());

this.reportViewer1.LocalReport.SubreportProcessing += new

SubreportProcessingEventHandler(SubreportProcessingEventHandler);

this.reportViewer1.RefreshReport();

}

private void SubreportProcessingEventHandler(object sender,

SubreportProcessingEventArgs e)

{

e.DataSources.Add(AlbumsDataSource); }

}

}

Page 26: ReportViewer.wiki.wiserv.ru/lib/exe/fetch.php?media=artucles:... · ReportViewer. Microsoft Visual Studio 2013 поддерживает функции создания отчетов

Откомпилируйте и запустите приложение. В окне отобразится элемент ReportViewer со списком авторов, и для каждого автора отобразится таблица с альбомами, отфильтрованная по текущему автору.

Рис. 41. Запущенное приложение.