C#. Windows Forms. Пример создания отчета (Report) в локальной базе данных, которая размещена в *.mdf-файле. База данных типа Microsoft SQL Server




Пример создания отчета (Report) в локальной базе данных, которая размещена в *.mdf-файле. База данных типа Microsoft SQL Server

В данном примере продемонстрировано формирование отчета на основе данных, которые размещены в локальной базе данных типа Microsoft SQL Server. База данных реализована в файле Education.mdf.
По данному примеру можно научиться создавать собственные отчеты, которые формируются на основе данных, что предназначены для использования под управлением СУБД Microsoft SQL Server.


Содержание


Поиск на других ресурсах:

Условие задачи

Дана база данных, которая предназначена для использования под управлением СУБД Microsoft SQL Server. В базе данных реализованы таблицы с именами Student и Session. Таблицы связаны между собой по некоторому полю.

Структура таблицы Student.

Структура таблицы Student

Структура таблицы Session.

Структура таблицы Session

Как видно из структуры таблиц, таблицы имеют связь по полю ID_Book.

Разработать приложение, демонстрирующее использование отчетов. Сформировать отчет, содержащий следующую информацию:

  • номер зачетной книжки (таблица Student);
  • фамилия и имя студента (таблица Student);
  • оценка по математике (таблица Session);
  • оценка по информатике (таблица Session);
  • оценка по философии (таблица Session);
  • средняя оценка (расчетное поле).

Отчет может выводиться в отдельной форме.

 


Соображения

Чтобы создать отчет, нужно создать представления (Views). Представление – это есть обычный запрос к базе данных на языке SQL. В представлении формируется результирующая таблица с выбранными данными. На основе этого представления будет создан отчет.

 


Выполнение

1. Запустить на выполнение систему Microsoft Visual Studio. Создать проект по шаблону Windows Forms Application

После загрузки Microsoft Visual Studio нужно создать новый проект. Подробный пример создания и сохранения нового проекта по шаблону Windows Forms Application изложен в теме:

Выбрать папку для проекта. Например

C:\Programs\C_Sharp\TrainReports01

 

2. Создать базу данных «Education.mdf» или загрузить готовый файл базы данных

В нашем случае загружаем архив с готовым (ранее подготовленным) файлом базы данных по этой ссылке.

Архив содержит файлы Education.mdf и Education.ldf. Рекомендуется распаковать эти файлы в папку, в которой будет размещаться разрабатываемое приложение.

 

3. Подключение файла базы данных к проекту

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

C:\Programs\C_Sharp\TrainReports01

Чтобы использовать базу данных «Education.mdf» нужно подключить ее к проекту стандартным способом. Для подключения файла базы данных к проекту используется команда «Add Connection…» из контекстного меню, которое вызывается в перечне Data Connections (рисунок 1).
Другой способ – выбрать команду «Connect to Database» (рисунок 1).

C#. Windows Forms. Варианты подключения файла базы данных к проекту

Рис. 1. Варианты подключения файла базы данных к проекту

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

  • в окне Add Connection (рисунок 2) выбрать кнопку «Change…» для поля Data Source;
  • в окне «Choose Data Source» выбрать источник данных (Data Source) – Microsoft SQL Server Database File (рисунок 3);
  • в следующем окне «Add Connection» в поле «Database file name» задать путь к файлу базы данных, как показано на рисунке 4 (кнопка «Browse…»).

MS Visual Studio. Окно Add Connection. Выбор источника данных

Рис. 2. Окно Add Connection. Выбор источника данных

MS Visual Studio. Окно Change Data Source с выбранным источником данных Microsoft SQL Server Database File

Рис. 3. Окно Change Data Source с выбранным источником данных Microsoft SQL Server Database File

Если все сделано правильно, то окно «Add Connection» может принять вид, как показано на рисунке 4. С помощью кнопки «Test Connection» можно протестовать соединение с базой данных.
Чтобы зафиксировать выбор базы данных, нужно выбрать OK.

MS Visual Studio. Окно Add Connection с выбранным типом источника данных и файлом базы данных Education.mdf

Рис. 4. Окно Add Connection с выбранным типом источника данных и файлом базы данных Education.mdf

 

4. Окно утилиты Server Explorer

После выполненных действий, окно утилиты Server Explorer примет вид, как показано на рисунке 5. В окне отображается развернутый вид базы данных Education.mdf.

MS Visual Studio. Окно утилиты Server Explorer с базой данных Education.mdf

Рис. 5. Окно утилиты Server Explorer с базой данных Education.mdf

База данных содержит следующие составляющие:

  • таблицы Student и Session;
  • диаграмму связей между таблицами Diagram1. Таблицы связаны между собою по полю ID_Book;
  • представление View1, содержащее отображение некоторых полей таблицы а также вычисляемое поле Average.

 

5. Разработка главной формы приложения

В соответствии с условием задачи, отчет должен выводиться в отдельной форме. Поэтому, главная форма приложения имеет вид как показано на рисунке 6.

C#. Windows Forms Application. Главная форма приложения

Рис. 6. Главная форма приложения

Как видно из рисунка, форма содержит только один элемент управления типа Button (кнопка) с именем button1. После клика на кнопке «Show Report» будет отображен отчет в другой форме.
Настраиваются следующие свойства элементов управления:

  • в элементе управления button1 свойство Text = «Show Button»;
  • в элементе управления Form1 (главная форма) свойство Text = «Report Viewer».

 

6. Подключение файла отчета к проекту

В системе Microsoft Visual Studio каждому отчету соответствует файл, который имеет расширение *.rdlc. Этот файл содержит данные, которые формируются в отчете.
Для создания файла в Microsoft Visual Studio нужно вызвать команду Add New Item из меню Project (рисунок 7).

C#. Windows Forms Application. Команда Add New Item... из меню Project

Рис. 7. Команда Add New Item… из меню Project

В результате откроется окно «Add New Item…», в котором нужно выбрать шаблон Report (рисунок 8) и задать имя для файла отчета Report1.rdlc (по умолчанию).

C#. Windows Forms. Выбор шаблона Report и установка имени для файла отчета Report1.rdlc

Рис. 8. Выбор шаблона Report и установка имени для файла отчета Report1.rdlc

После подтверждения выбора (кнопка Add), окно Microsoft Visual Studio будет иметь вид как показано на рисунке 9.

C#. Windows Forms. Report Viewer. Окно вкладки, которая соответствует файлу Report1.rdlc

Рис. 9. Окно вкладки, которая соответствует файлу Report1.rdlc

 

7. Проектирование отчета

Перед проектированием отчета нужно активировать окно файла «Report1.rdlc [Design]».

7.1. Панель инструментов ToolBox

Для проектирования элементов отчета используется панель ToolBox (рисунок 10).

C#. Windows Forms. Панель ToolBox с инструментами, которые необходимы для проектирования отчета

Рис. 10. Панель ToolBox с инструментами, которые необходимы для проектирования отчета

 

7.2. Элементы управления, предназначенные для формирования отчета

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



Предлагаются следующие элементы управления:

  • элемент управления типа TextBox. Отображает метки, поля или значения, которые получаются в результате вычислений;
  • элемент управления типа Line. Рисует линию, которая имеет толщину от 1 точки и больше;
  • элемент управления типа Table. Этот элемент управления отображает данные в сетке (grid), что имеет фиксированное количество колонок и переменное количество строк;
  • элемент управления типа Matrix. Отображает агрегированные данные в сетке, которая имеет переменное количество колонок и переменное количество строк;
  • элемент управления типа Rectangle. Рисует прямоугольник как контейнер для других элементов отчета;
  • элемент управления типа List. Отображает набор элементов отчета, которые повторяются для каждой группы или строки данных;
  • элемент управления типа Image. Отображает изображение в виде битовой карты (например, логотип, фото);
  • элемент управления типа Subreport. Отображает связанный подотчет в границах данного отчета;
  • элемент управления типа Chart. Отображает данные в виде диаграмм разных видов;
  • элемент управления типа Gauge. Отображает значение, поле или выражение в виде линейной или радиальной зависимости.

Не вдаваясь в особенности использования каждого элемента управление для решения нашей задачи нужно использовать элемент управления Table. Этот элемент управления отображает данные в сетке (grid), которые имеют фиксированное количество колонок и переменное количество строк.

 

7.3. Настройка элемента управления типа Table
7.3.1. Настройка источника данных для элемента управления Table

Чтобы разместить элемент управления типа Table на макете отчета, нужно его выделить (мышкой) в панели Toolbox и сделать клик в области отчета. В результате загрузится мастер настройки источника данных.

В первом окне мастера Data Source Configuration Wizard нужно выбрать источник данных Database (рисунок 11).

MS Visual Studio. Базы данных. Выбор источника данных

Рис. 11. Выбор источника данных, из которого приложение будет получать данные для отчета

После выбора «Next >» откроется следующее окно (рисунок 12). В этом окне нужно выбрать модель базы данных Dataset. Выбранная модель базы данных определяет типы данных объектов, которые использует приложение. Эта модель будет добавлена к нашему проекту.

MS Visual Studio. База данных Microsoft SQL Server. Выбор модели данных Dataset

Рис. 12. Выбор модели данных Dataset

После выбора «Next >» откроется следующее окно (рисунок 13). В этом окне нужно выбрать соединение с базой данных, которая сохраняется в файле Education.mdf. Этому соединению соответствует строка Connection String, которая формируется системой автоматически.

MS Visual Studio. База данных MS SQL Server. Настройка соединения с базой данных. Строка ConnectionString

Рис. 13. Настройка соединения с базой данных. Строка ConnectionString

После выбора «Next >» нужно подтвердить копирование файла базы данных в текущий проект (рисунок 14). В результате строка соединения модифицируется. Поскольку, база данных Education.mdf уже подключена к проекту (смотрите п.3), то рекомендуется выбрать «Нет».

MS Visual Studio. Окно уточнения копирования файла базы данных в текущий проект

Рис. 14. Окно уточнения копирования файла базы данных в текущий проект

В следующем окне (рисунок 15) предлагается сохранить строку Connection String в конфигурационном файле приложения. Нужно оставить все без изменения и выбрать «Next >».

MS Vusial Studio. Окно с предложением сохранения строки Connection String в конфигурационном файле приложения

Рис. 15. Окно с предложением сохранения строки Connection String в конфигурационном файле приложения

Следующим есть окно выбора объектов базы данных, которые будут включены в набор данных (рисунок 16). В нашем случае нужно выбрать все элементы просмотра View1, который был сформирован в СУБД Microsoft SQL Server.

MS Visual Studio. Выбор объектов базы данных для их отображения в отчете

Рис. 16. Выбор объектов базы данных для их отображения в отчете

После выбора кнопки «Finish» отобразится предварительно открытое окно Dataset Properties с созданным набором данных (рисунок 17). В этом окне отображаются поля просмотра View1, что будут отображаться в отчете. Следует напомнить, что просмотр View1 был спроектирован средствами СУБД Microsoft SQL Server.

MS Visual Studio. База данных MS SQL Server. Окно Dataset Properties

Рис. 17. Окно Dataset Properties с отображенными полями просмотра View1

По желанию, можно создать еще один источник данных с помощью кнопки New… (см. рисунок 17).

После подтверждения на OK, окно файла отчета Report1.rdlc будет иметь вид, как показано на рисунке 18.

C#. Windows Forms Application. Компонент ReportViewer. Окно файла отчета Report1.rdlc

Рис. 18. Окно файла отчета Report1.rdlc после размещения и настройки таблицы Table

 

7.3.2. Настройка столбцов таблицы для отображения в отчете

В элементе управления Table1 существует две области:

  • область Header, которая отображает заголовок каждого столбца таблицы
  • область Data, которая отображает набор данных, которые выводятся в каждой строке таблицы. Набор данных формируется на основе просмотра View1.

 

7.3.2.1. Настройка заголовков

Чтобы настроить название каждого столбца нужно сделать двойной клик мышкой в соответствующей ячейке области Header так, как это показано на рисунке 19.

C#. Windows Forms. Элемент управления ReportViewer. Настройка заголовка для поля

Рис. 19. Настройка заголовка для поля «№ зачетной книжки»

По всей видимости, система сформировала таблицу, которая содержит 3 столбца. В нашем случае, просмотр View1 содержит 6 столбцов. Чтобы добавить столбец, нужно:

  • сделать клик правой кнопкой мышки на границе таблицы (серый фон) в соответствующем столбце;
  • из меню Insert Column выполнить команду Left или Right (рисунок 20).

C#. Компонент ReportViewer. Вызов команды добавления нового столбца

Рис. 20. Вызов команды добавления нового столбца

Чтобы разместить название заголовка таблицы по центру, используется свойство TextAlign (см. рисунок 21) объекта TextBox13, что был создан для первого столбца таблицы с названием «Book number».

C#. Windows Forms Application. Установка центрирования заголовка таблицы

Рис. 21. Установка центрирования заголовка таблицы

Также, можно настроить ширину каждого столбца таблицы.
После настройки всех заголовков, окно файла отчета будет иметь вид, как показано на рисунке 22.

C#. Элемент управления ReportViewer. Окно отчета после настройки заголовков таблицы

Рис. 22. Окно отчета после настройки заголовков таблицы

 

7.3.2.2. Настройка данных

На этом этапе нужно настроить данные, которые будут отображаться в строках таблицы. Количество строк, которые будут отображаться, может изменятся. Данные отображаются в области Data таблицы.

Каждый столбец таблицы настраивается по отдельности. Первым столбцом в просмотре View1 есть столбец с названием Num_Book. Этот столбец нужно выбрать в контекстном меню таблицы как показано на рисунке 23.

C#. Шаблон Windows Forms. Настройка отображения данных в столбце Book_number

Рис. 23. Настройка отображения данных в столбце Book_number (№ зачетной книжки)

Соответствующие поля просмотра View1 выбираются во всех других столбцах. После формирования всех столбцов, таблица примет вид, как показано на рисунке 24.

C#. Шаблон Windows Forms. Окно отчета. Компонент ReportViewer

Рис. 24. Окно отчета после настройки таблицы

 

7.4. Настройка заголовка отчета

Для установки заголовка отчета используется инструмент TextBox (см. рисунок 25), который нужно разместить над таблицей. После размещения, будет создан соответствующий объект. Чтобы задать название, нужно сделать клик в прямоугольной области инструмента TextBox.

C#. Windows Forms. Компонент ReportViewer. Установка заголовка отчета "View1"

Рис. 25. Установка заголовка отчета «View1»

По желанию, можно улучшить (изменить) вид отчета с помощью других инструментов.

 

8. Проектирование дополнительной формы и связывание отчета с формой

В соответствии с условием задачи, при клике на кнопке «Show Report» может открыться новая форма приложения с созданным отчетом. Поэтому, в программе нужно разработать новую форму.

 

8.1. Добавление формы к проекту

Разработка дополнительной формы реализуется стандартным для MS Visual Studio способом. Более подробный пример создания новой формы описывается в теме:

Сначала нужно добавить форму (файл формы, ресурс) к проекту с помощью команды

Project -> Add Windows Form...

В результате откроется окно «Add New Item», в котором нужно выбрать шаблон Windows Form и оставить имя файла Form2.cs, которое предлагается системой.

C#. Шаблон Windows Forms. Окно выбора шаблона создаваемой формы

Рис. 26. Окно выбора шаблона создаваемой формы

В результате, Microsoft Visual Studio создаст новую форму, которая, пока что не имеет никаких элементов управления. Форме соответствует класс с именем Form2.

 

8.2. Элемент управления Report Viewer

Чтобы в приложении мог отображаться отчет, в системе Microsoft Visual Studio предусмотрен элемент управления Report Viewer (рисунок 27). Этот элемент управления осуществляет связь приложения (программы) с файлом отчета Report1.rdlc. Сначала нужно перейти в режим проектирования формы «Form2.cs [Design]». Далее, из панели инструментов ToolBox во вкладке Reporting нужно выбрать элемент управления ReportViewer и с помощью мышки разместить его на форме Form2, как показано на рисунке 27. В результате система автоматически предложит выбрать файл отчета в окне ReportViewer Tasks (см. рис. 27). Кроме того, для элемента управления будет сформирован экземпляр (объект) с именем reportViewer1.

C#. Шаблон Windows Forms Application. Размещение элемента управления ReportViewer на форме

Рис. 27. Размещение элемента управления Report Viewer на форме

После выбора кнопки спадающего списка, в окне Report Viewer Tasks отобразится список подключенных (созданных) файлов отчетов. В нашем случае нужно выбрать один файл с именем TrainReports01.Report1.rdlc (рис. 28). Здесь префикс TrainReports01 означает имя нашего проекта.

C#. Шаблон Windows Forms Application. Подключение файла проекта к элементу управления ReportViewer

Рис. 28. Подключение файла проекта к элементу управления ReportViewer

После выбора файла Report1.rdlc, корректировки размеров формы Form2 и корректировки размеров reportViewer1, окно формы примет вид как показано на рисунке 29.

C#. Шаблон Windows Forms Application. Окно дополнительной формы после размещения и настройки элемента управления ReportViewer

Рис. 29. Окно дополнительной формы после размещения и настройки элемента управления ReportViewer

Система автоматически сгенерирует три объекта с именами EducationDataSet, Query1BindingSource и Query1TableAdapter. Эти объекты связывают приложение с базой данных. Их можно использовать для программного управления отчетом. Но это уже совсем другая тема.
Чтобы проверить, что файл Report1.rdlc связан с reportViewer1 надо сделать клик на стрелке в правом углу (рисунок 30).

C#. Шаблон Windows Forms. Проверка связи reportViewer1 с файлом отчета Report1.rdlc

Рис. 30. Проверка связи reportViewer1 с файлом отчета Report1.rdlc

 

9. Листинг файла формы Form2.cs

После настройки reportViewer1, система автоматически сформирует код отображения отчета на форме в обработчике события Load формы Form2. Событие Load формы Form2 вызовется в момент, если нужно отобразить форму на экране. Поэтому, вызов формы Form2 из основной формы (Form1) автоматически отобразит отчет.
Общий листинг модуля Form2.cs следующий:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TrainReports01
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'EducationDataSet.View1' table. You can move, or remove it, as needed.

            this.View1TableAdapter.Fill(this.EducationDataSet.View1);

            this.reportViewer1.RefreshReport();
        }
    }
}

 

10. Программирование клика на кнопке «Show Report» для отображения отчета из главной формы

Последний шаг – это запрограммировать клик на кнопке «Show Report» главной формы.
Вызов обработчика события Click клика на кнопке Show Report выполняется стандартным для MS Visual Studio способом.

Подробный пример программирования события описывается в статье:

Не вдаваясь в подробности программирования события, ниже приводится код обработчика события button1_Click(), из которого вызывавется отчет

// клик на кнопке "Show Report"
private void button1_Click(object sender, EventArgs e)
{
    //
    Form2 f = new Form2(); // создать экземпляр формы 2
    f.ShowDialog(); // вывести форму, автоматически выведется отчет
}

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

 

11. Листинг файла Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TrainReports01
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // клик на кнопке "Show Report"
        private void button1_Click(object sender, EventArgs e)
        {
            //
            Form2 f = new Form2(); // создать экземпляр формы 2

            f.ShowDialog(); // вывести форму, автоматически выведется отчет
        }
    }
}

 

12. Запуск приложения на выполнение (тестирование)

После запуска приложения на выполнение, окно выполнения программы, где отображается отчет, примет вид как показано на рисунке 31.

C#. Шаблон Windows Forms Application. Элемент управления ReportViewer. Отображение отчета

Рис. 31. Отображение отчета в программе

 


Связанные темы