Найти тему
Илья Милехин

C# WPF - создание отчета

Оглавление

Предисловие: Данная статья написана после неудачной попытки быстро создать простенький отчет для маленького проекта, используя контрол ReportViewer в WPF. Найденные статьи были либо устаревшие, либо трудноусваемые.

https://yadi.sk/d/Vs0iw4ccMz04Mw - ссылка на скачивание образца;
https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/ms255056(v%3Dvs.100) - MSDN;
http://wladm.narod.ru/C_Sharp/ReportViewer.html - Сайт Wlada;
https://www.c-sharpcorner.com/article/rdlc-report-using-wpf-and-c-sharp/ - C# Corner;
https://www.c-sharpcorner.com/article/install-rdlc-extensions-in-visual-studio-2017/ - C# Corner;
https://www.youtube.com/watch?v=T60uw33fS04

В Visual Studio c 2015 года отсутствует дизайнер отчетов Microsoft RDLC

Рисунок 1 - Добавление нового элемента "Отчет"
Рисунок 1 - Добавление нового элемента "Отчет"

1 УСТАНОВКА

1.1 Установка Microsoft RDLC Report Designer

Для установки Microsoft RDLC Report Designer в созданном проекте нужно раскрыть вкладку «Расширения» и выбрать пункт «Управление расширениями»

Рисунок 2 - Открытие окна "Управление расширениями"
Рисунок 2 - Открытие окна "Управление расширениями"

В открывшемся окне «Управления расширениями» воспользоваться строкой для поиска, указав MicrosoftRDLC. В результатах поиска выбрать расширение Microsoft RDLC Report Designer и нажать кнопку «Скачать»

Рисунок 3 - Скачивание расширения Microsoft RDLC Report Designer
Рисунок 3 - Скачивание расширения Microsoft RDLC Report Designer

Начнется скачивание расширения.

Рисунок 4 - Скачивание расширения Microsoft RDLC Report Designer
Рисунок 4 - Скачивание расширения Microsoft RDLC Report Designer

После скачивания расширения Visual Studio необходимо закрыть, тогда начнется установка расширения :

Рисунок 5 - Начало установки
Рисунок 5 - Начало установки

Соглашаемся с вносимыми изменениями нажав “Modify”

Рисунок 6 - Согласие на вносимые изменения
Рисунок 6 - Согласие на вносимые изменения

Начнется завершающий этап установки расширения:

Рисунок 7 - Завершающий этап установки расширения
Рисунок 7 - Завершающий этап установки расширения

В завершении закрываем окно сообщающее о успешной установке:

Рисунок 8 - Изменения завершены
Рисунок 8 - Изменения завершены

Теперь в Visual Studio можно использовать Microsoft RDLC Report Designer

Рисунок 9 - Добавление в проект "Отчет"
Рисунок 9 - Добавление в проект "Отчет"

1.2 Установка дополнительных библиотек и ссылок

Следующим шагом нужно добавить контрол ReportViewer в панель инструментов. Для этого откройте диспетчер пакетов NuGet щелкнув ПКМ по названию вашего решения и выберите пункт "Управление пакетами NUGet..."

Рисунок 10 - Управление пакетами NuGet...
Рисунок 10 - Управление пакетами NuGet...

и скачайте следующие пакеты:

  • Microsoft.ReportViewer.common
  • Microsoft.ReportViewer.Winforms
Рисунок 11 - Необходимые пакеты NuGet
Рисунок 11 - Необходимые пакеты NuGet

Выбрать каждый из них и нажать на кнопку установить

Рисунок 12 - Выбор и установка пакета
Рисунок 12 - Выбор и установка пакета

Добавление ссылки на пространства имен Windows FormsIntegration В обозревателе решений щелкните правой кнопкой мыши узел «Ссылки» и выберите пункт меню «Добавить ссылку».

Рисунок 13 - Добавление ссылки в проект
Рисунок 13 - Добавление ссылки в проект

Выберите файл WindowsFormsIntegration поставив галочку и нажмите кнопку «ОК».

Рисунок 14 - Добавление ссылки в проект
Рисунок 14 - Добавление ссылки в проект

Пересоберите решение

Рисунок 15 - Действие "Пересобрать решение"
Рисунок 15 - Действие "Пересобрать решение"

2 Данные отчета

2.1 Настройка источника данных и набора данных

Для созданного отчета нужно добавить источник данных и определить набор данных.

  • В Visual Studio источник данных относится к объектам .NET, которые подключаются к хранилищу данных и делают данные доступными для приложения.
  • Набор данных — это набор объектов, которые хранят данные из базы данных в памяти и поддерживают отслеживание изменений, чтобы обеспечить выполнение операций создания, чтения, обновления и удаления (CRUD) с этими данными без необходимости постоянного подключения к базе данных.
Рисунок 16 - Пустой отчет
Рисунок 16 - Пустой отчет

Отобразим панель «Данные отчета». Способы отображения панели:

  1. Вкладка «Вид» пункт данные отчета;
  2. Нажатие горячих клавиш CTRL+ALT+D.
Рисунок 17 - Отображение панели "Данные отчета"
Рисунок 17 - Отображение панели "Данные отчета"

В панели "Данные отчета" щелкнуть ПКМ по пункту «Наборы данных» в появившемся контекстом меню выбрать «Добавить набор данных…»

Рисунок 18 - Отображение окна "Свойства набора данных"
Рисунок 18 - Отображение окна "Свойства набора данных"

После чего автоматически будет открыт "Мастер настройки источника данных" для настройки источника данных. Из предложенных типов выбираем «База данных»

Рисунок 19 -  Выбор типа источника данных
Рисунок 19 - Выбор типа источника данных

Выбираем «Набор данных» и жмем далее

Рисунок 20 - Мастер настройки источника данных "Выбор модели БД"
Рисунок 20 - Мастер настройки источника данных "Выбор модели БД"

Создаем новое подключение к базе данных

Рисунок 21 - Создание нового подключения к БД
Рисунок 21 - Создание нового подключения к БД

Изменяем тип источника данных. (Если по умолчанию не выбран тип источника этот шаг будет пропущен, а сразу отобразится окно как на Рисунке 23)

Рисунок 22 - Изменение типа источника данных для БД
Рисунок 22 - Изменение типа источника данных для БД

В нашем примере используется файл базы данных Access

Рисунок 23 - Выбор источником данных файла БД Microsoft Access
Рисунок 23 - Выбор источником данных файла БД Microsoft Access

Указываем путь до файла базы данных и жмем ОК

Рисунок 24 - Выбор пути к фалу *,mdb Acces
Рисунок 24 - Выбор пути к фалу *,mdb Acces

В выпадающий список добавиться наша выбранная база данных

Рисунок 25 - Подтверждение выбора подключения БД
Рисунок 25 - Подтверждение выбора подключения БД

Далее Visual Studio предложит скопировать файл БД в папку вашего проекта.

Рисунок 26 - Копирование файла в проект
Рисунок 26 - Копирование файла в проект

Далее выбираем объекты БД которые в дальнейшем будут использоваться как набор данных и указываем имя источника данных

Рисунок 27 - Выбор объектов базы данных
Рисунок 27 - Выбор объектов базы данных

И в завершении создаем набор данных указав ему имя, выбрав источник данных и выбрав из выпадающего списка доступный набор даных.

Рисунок 28 - Установка набора данных
Рисунок 28 - Установка набора данных

В результате проделанных действий на панели "Данные отчета" должно отображаться следующее

Рисунок 29 - Панель "Данные отчета"
Рисунок 29 - Панель "Данные отчета"

2.2 Добавление элемента на отчет и его заполнение

Отобразим панель элементов

  1. Вкладка вид - пункт Панель элементов
  2. Горячие клавиши Ctrl+Alt+X
Рисунок 30 - Отображение "Панели элементов"
Рисунок 30 - Отображение "Панели элементов"

В панели элементов выберем таблицу и добавим на конструктор отчета

Рисунок 31 - Добавление таблицы в отчет
Рисунок 31 - Добавление таблицы в отчет

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

Рисунок 32 - Выбор свойств набора данных
Рисунок 32 - Выбор свойств набора данных
Рисунок 33 - Заполненная таблица
Рисунок 33 - Заполненная таблица

3 Связь отчета с формой

в MainWindow.xaml нужно добавить новое пространство имен xmlns:ReportViewerRDLC="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms"

и следующую разметку

<Grid>

<WindowsFormsHost>

<ReportViewerRDLC:ReportViewer x:Name="MyReportViewer"/>

</WindowsFormsHost>

</Grid>

Рисунок 34 - MainWindow.xaml
Рисунок 34 - MainWindow.xaml

using Microsoft.Reporting.WinForms;
using System;
using System.Data;
using System.Data.OleDb;
using System.Windows;
namespace WpfApp1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
DataSet MyDataSet = new DataSet();
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\drago\source\repos\WpfApp1\Education.mdb";
string sSql = "Select * from Student";
using (OleDbConnection oleConn = new OleDbConnection(connectionString))
{
try
{
oleConn.Open();
OleDbCommand olecmd = new OleDbCommand(sSql, oleConn);
olecmd.CommandType = CommandType.Text;
OleDbDataAdapter da = new OleDbDataAdapter(olecmd);
da.Fill(MyDataSet);
}
catch (Exception exMessage)
{
MessageBox.Show(exMessage.Message);
}
}
MyReportViewer.ProcessingMode = ProcessingMode.Local; MyReportViewer.LocalReport.ReportPath = @"C:\Users\drago\source\repos\WpfApp1\Report1.rdlc";
MyReportViewer.LocalReport.DataSources.Add(new ReportDataSource("DataSet_Student", MyDataSet.Tables[0]));
MyReportViewer.SetDisplayMode(DisplayMode.PrintLayout);
MyReportViewer.RefreshReport();
}
}
}

Рисунок  35 - MainWindow.xaml.cs.
Рисунок 35 - MainWindow.xaml.cs.

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

Рисунок 36 - Запущенное приложение
Рисунок 36 - Запущенное приложение