Использование элемента управления ReportViewer в ASP.NET 2.0
Автор:Eve Cole
Время обновления:2009-07-01 16:43:40
Перевод этой статьи: webabcd
представлять
Общим требованием для любого приложения, управляемого данными, является отчетность. Однако эта очень важная возможность не предусмотрена для нас в ASP.NET 1.x. Однако, к счастью, элемент управления ReportViewer, входящий в состав .NET 2.0, может удовлетворить некоторые основные потребности в отчетах. В этой статье я покажу вам, как использовать этот элемент управления. Элемент управления ReportViewer можно использовать как в веб-программах, так и в программах Windows. Здесь я только расскажу, как использовать его в веб-программах.
Пример отчета
Мы предполагаем, что хотим создать список информации о клиентах, как показано ниже:

Приведенный выше отчет представляет собой очень простой список информации о клиентах, сгруппированной по странам. Данные для отчета берутся из таблицы «Клиенты» базы данных «Борей». По умолчанию здесь отображается вся информация о клиенте. Однако вы также можете отображать информацию о клиентах, принадлежащих к указанной вами стране.
Отчет создается с использованием элемента управления ReportViewer, который может получать данные из строго типизированного набора данных или пользовательской коллекции объектов. В реальной разработке программ мы часто используем трехуровневую архитектуру, и полученные данные часто представляют собой DataSet или общую коллекцию, полученную с бизнес-уровня. Здесь я планирую использовать в качестве источника данных общую коллекцию вместо строго типизированного набора данных.
Создать библиотеку классов
Сначала откройте Visual Studio и создайте проект библиотеки классов под названием ReportViewerLib. Добавьте класс с именем Customer, как показано ниже:
использование системы; использование System.Data; использование System.Configuration; использование System.Data.SqlClient; использование System.Collections.Generic; пространство имен ReportViewerLib { публичный классКлиент { общедоступная строка strCustomerID; общедоступная строка strCompanyName; общедоступная строка strContactName; общедоступная строка strCountry;
общедоступная строка CustomerID { получать { вернуть стрКустомерИД; } набор { стрКустомерИД = значение; } }
открытая строка CompanyName { получать { вернуть имя компании; } набор { стрКомпанияИмя= значение; } }
общедоступная строка ContactName { получать { вернуть имя стрКонтакта; } набор { стрКонтактИмя = значение; } }
публичная строка Страна { получать { вернуть стрКантри; } набор { стрКаунтри = значение; } }
общедоступный статический список |
GetCustomersForCountry (строка страны) { SqlConnection cnn=новый SqlConnection( ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString); SqlCommand cmd = новый SqlCommand (); cmd.Connection = cnn; cmd.CommandText="выбрать Идентификатор клиента, имя компании, имя контакта, страна от клиентов, где страна=@country"; SqlParameter p = новый SqlParameter ("@страна",страна); cmd.Параметры.Добавить(п); cnn.Открыть(); Читатель SqlDataReader = cmd.ExecuteReader(); Список |
(); пока (читатель.Читать()) { Клиент c = новый Клиент(); c.CustomerID = reader.GetString(0); c.CompanyName = reader.GetString(1); c.ContactName = reader.GetString(2); c.Country = reader.GetString(3); список.Добавить(с); } cnn.Закрыть(); список возврата; }
общедоступный статический список |
ПолучитьВсеКлиенты() { SqlConnection cnn = новый SqlConnection( ConfigurationManager.ConnectionStrings ["NorthwindConnectionString"].ConnectionString); SqlCommand cmd = новый SqlCommand(); cmd.Connection = cnn; cmd.CommandText = "выбрать CustomerID,CompanyName,ContactName,Страна клиентов"; cnn.Открыть(); Читатель SqlDataReader = cmd.ExecuteReader(); Список |
(); пока (читатель.Читать()) { Клиент c = новый Клиент(); c.CustomerID = reader.GetString(0); c.CompanyName = reader.GetString(1); c.ContactName = reader.GetString(2); c.Country = reader.GetString(3); список.Добавить(с); } cnn.Закрыть(); список возврата; }
} }
|
Класс Customer определяет четыре общедоступных свойства, а именно CustomerID, CompanyName, ContactName и Country. После этого в этом классе содержатся два статических метода — GetCustomersForContry() и GetAllCustomers(). Эти два метода относительно просты. Один возвращает всю информацию о клиентах, принадлежащих определенной стране, а другой возвращает всю информацию о клиентах. Сначала откройте подключение к базе данных Northwind, а затем выполните запрос SELECT через объект SqlCommand. После этого используйте объект SqlDataReader для получения данных. Пройдите через этот объект SqlDataReader, каждый раз создайте внутри него объект Customer, затем задайте его различные свойства и, наконец, добавьте его в общую коллекцию объектов Customer. В конце класса вызывающему объекту возвращается универсальная коллекция объектов Customer.
Создать источник данных
При проектировании отчета вам необходимо указать источник данных для него в вашем проекте. Чтобы добавить источник данных в ваш проект, вы можете сделать это, выбрав меню «Данные» -> «Добавить новый источник данных». Затем появится диалоговое окно, показанное ниже:

Источником данных может быть база данных, веб-служба или объект. В данном случае мы выбрали Объект. Затем нажмите кнопку «Далее», и появится всплывающий интерфейс для выбора источника данных. Мы выбрали класс Customer (как показано на рисунке ниже).

Нажмите кнопку «Готово», чтобы завершить работу мастера настройки источника данных. Таким образом, вы добавили новый источник данных в свою библиотеку классов. Если вы хотите просмотреть источник данных, вы можете сделать это. Выберите меню «Данные» -> «Показать источник данных», и появится интерфейс, показанный ниже:

Отчеты о проектировании
Далее добавьте отчет. Щелкните проект правой кнопкой мыши и выберите «Добавить новый элемент». В диалоговом окне выберите «Отчет» и нажмите кнопку «Добавить» (как показано на рисунке ниже). Таким образом, мы добавили файл с именем «Report1.rdlc». Файл .rdlc — это файл отчета, в котором сохраняется макет отчета и сопоставление данных.

После открытия файла Report1.rdlc на панели инструментов Visual Studio отобразится набор элементов управления, связанных с отчетом (как показано ниже).

Среди этих элементов управления очень часто используются элемент управления «Текстовое поле» и элемент управления «Таблица». Элемент управления «Текстовое поле» используется для отображения фрагмента статического текста или выражения. Элемент управления «Таблица» используется для отображения табличных данных, а полученные с его помощью результаты будут отображаться в «теле» вашего отчета.
Разработанный отчет представлен ниже:

В заголовке раздела «Заголовок» отчета находится текстовое поле, свойство Value которого имеет значение «Список клиентов». Под этим текстовым полем находится еще одно текстовое поле, значение его свойства Value — «=Parameters!SubTitle.Value». Это означает, что значение текстового поля берется из параметра с именем SubTitle. Как определить параметры? Для этого необходимо добавить параметры в свойство ReportParameters отчета. Открывшееся диалоговое окно параметров отчета показано на рисунке ниже:

Обратите внимание: установка параметров выполняется в нашем .NET-коде.
Если вы хотите отображать дату в отчете, просто установите для свойства Value соответствующего текстового поля значение «=FormatDateTime(ToDay(),DateFormat.ShortDate)». Одним из больших преимуществ отчетов является то, что они имеют множество встроенных функций, таких как ToDay() и FormatDateTime. В этом примере мы используем функцию FormatDateTime() для отображения текущей даты (ToDay()) в формате ShortDate.
Теперь перетащите элемент управления «Таблица» из панели инструментов в свой отчет. По умолчанию элемент управления «Таблица» имеет 3 строки и 3 столбца. Эти 3 строки: заголовок таблицы, подробная информация и нижний колонтитул таблицы. Конечно, вы также можете добавлять строки и столбцы в элемент управления «Таблица». Перетащите свойства CustomerID, CompanyName, ContactName и Country из окна источника данных в строку сведений элемента управления Table. Таким образом, система автоматически добавит текстовое поле и установит для его свойств значения =Fields!CustomerID.Value, =Fields!CompanyName.Value и так далее. На этом этапе заголовки столбцов также будут добавлены автоматически. Конечно, вы также можете внести необходимые изменения в соответствии с вашими потребностями.
Далее мы хотим сгруппировать записи по стране, к которой принадлежит клиент. Щелкните правой кнопкой мыши границу строки сведений и выберите «Вставить группу» (как показано на изображении ниже).

Затем появится диалоговое окно, показанное ниже:

На вкладке «Сортировка» выберите «=Поля!Страна.Значение» в качестве выражения и «По возрастанию» в качестве направления сортировки.
Вот такие вещи, очень простые. На этом мы завершили оформление отчета.
Показать отчет
Создайте новый веб-сайт с именем «ReportViewerDemo». Добавьте ссылку на сборку ReportViewerLib, чтобы сборка была скопирована в каталог BIN вашего веб-сайта. После этого добавьте файл Report1.rdlc на свой веб-сайт. Перетащите элемент управления ReportViewer на вкладке «Данные» панели инструментов на страницу Default.aspx, откройте панель смарт-тегов элемента управления ReportViewer и выберите Report1.rdlc в раскрывающемся списке «Выбрать отчет», как показано на рисунке. рисунок ниже:

После выбора файла отчета система автоматически добавит элемент управления источником данных объекта со свойством TypeName в качестве Customer. Проверить это можно в мастере настройки управления источниками данных объекта.
Затем перетащите элемент управления DropDownList в заголовок страницы и установите для него четыре параметра: «Все», «США», «Великобритания» и «Бразилия». Также установите для свойства AutoPostBack значение True. Затем откройте мастер настройки элемента управления источником данных и установите операцию «ВЫБРАТЬ» для метода SelectCustomersForCountry().

Установите для параметра страны метода SelectCustomersForCountry() значение SelectedValue из DropDownList1.

По умолчанию в отчете отображается вся информация о клиенте. Когда вы выбираете страну в DropDownList, в отчете будет отображаться информация о клиентах, принадлежащих выбранной вами стране. Чтобы выполнить такую функцию, нам нужно только обработать событие SelectedIndexChanged DropDownList.
защищенная пустота DropDownList1_SelectedIndexChanged (отправитель объекта, EventArgs e) { если (DropDownList1.SelectedValue == "Все") { ObjectDataSource1.SelectMethod = "GetAllCustomers"; ИсточникДанныхОбъекта1.ВыбратьПараметры.Очистить(); Параметр ReportParameter = новый параметр ReportParameter («Подзаголовок», «Список всех клиентов»); ReportParameter[] p = {параметр}; ReportViewer1.LocalReport.SetParameters(p); } еще { ObjectDataSource1.SelectMethod = "GetCustomersForCountry"; ObjectDataSource1.SelectParameters[0].DefaultValue = DropDownList1.ВыбранноеЗначение;
Параметр ReportParameter = новый параметр ReportParameter («Подзаголовок», «Список клиентов для страны»); ReportParameter[] p = {параметр}; ReportViewer1.LocalReport.SetParameters(p); } } |
Этот код сначала проверяет свойство SelectedValue элемента управления DropDownList. Если это «Все», установите для свойства SelectMethod элемента управления источником данных значение GetAllCustomers. Кроме того, нам также необходимо очистить коллекцию SelectParameters, поскольку метод GetAllCustomers() не требует никаких параметров. Затем мы создаем экземпляр класса ReportParameter и устанавливаем имя и значение параметра отчета в его конструкторе. Напомним параметры, которые мы определили при проектировании отчета. Затем создайте массив ReportParameter. Вызовите метод SetParameters() с этим массивом в качестве параметра. Блок кода «else» также очень прост, то есть используемый метод становится GetCustomersForCountry().
Вот такие вещи, очень простые. Отчет завершен. Вы можете запустить страницу Default.aspx, чтобы увидеть эффект. Обратите внимание, что элемент управления ReportViewer имеет встроенные функции экспорта, которые позволяют экспортировать отчеты в формат Excel или PDF. Элемент управления ReportViewer также имеет множество свойств, их можно изучить самостоятельно.
Подвести итог
Элемент управления ReportViewer в ASP.NET предоставляет множество основных функций отчетов. В этой статье мы используем объект управления источниками данных для разработки отчета. Мы создали библиотеку классов и источник данных. Наконец, используйте элемент управления ReportViewer для отображения отчета.