Работа с Crystal Report .NETИсточник: Gotdonet
Популярный пакет генератора отчетов Crystal Report предназначен для создания отчетов презентабельного вида различного типа: табличные запросы к базам данных, сводные диаграммы, OLAP данные. Версия Crystal Report .NET несколько ограничена в возможностях по сравнению с Crystal Report, поставляемым как отдельное приложение, но тем не менее она позволяет реализовать широкий спектр отчетов для Windows и Web приложений. ВведениеПопулярный пакет генератора отчетов Crystal Reportпредназначен для создания отчетовпрезентабельного вида различного типа:табличные запросы к базам данных, сводныедиаграммы, OLAP данные. Версия Crystal Report .NET несколькоограничена в возможностях по сравнению с CrystalReport, поставляемым как отдельное приложение, нотем не менее она позволяет реализовать широкийспектр отчетов для Windows и Web приложений. Настройка сайтаНастройки сайта, общие для всех страниц, будемхранить в файле web.config
Значения этих параметров говорят сами за себя -имя SQL сервера, название базы данных на сервере,имя пользователя базы данных парольпользователя. Подключение к базе данных спостраничным выводом запросаДля создания нового файла отчета необходимовыбрать в Solution Explorer щелкнуть правой клавишеймыши на узле проекта и выбрать следующий пунктменю - Add -> Add New Item и ввести в качестве именифайла connectDatabase.rpt.
После добавления файла отчета откройте его всреде. На следующем шаге необходимо добавитьподключение к базе данных, откуда отчет будетбрать данные. В качестве источника данных будем использоватьMicrosoft OLE DB Provider for SQL Server. Щелкните правой клавишей мыши на поле отчета ивыберите Database -> Add\Remove Database -> OLDE DB (ADO). Прираскрытии этого узла появиться мастер дляподключения базы данных SQL сервера. Заполните всенеобходимые поля, и убедитесь, что в блоке AvailableData Sources стало доступно подключение к учебной базеNorthWind вашего сервера .
В качестве источников данных перенесите в блокSelected Tables таблицу Customers. Теперь к нашему отчету подключена таблица Customersучебной базы NorthWind.
Теперь добавим поля таблицы Customers к нашемуотчету. Для этого щелкнем правой клавишей мыши на полеотчета и выберем Report -> Report Expert. Далее следуемуказаниям мастера: Закладка Data - в блоке Tables in report оставим Customers Закладка Fields - в поле Fields to Display добавим поляCustomers.CompanyName, Customers.ContactName, Customers.ContactTitle, Customers.Adress,Customers.City, Customers.Region, Customers.PostalCode, Customers.Country,Customers.Phone, Customers.Fax.
Закладка Group - в блок Group By добавим Customers.CompanyName Закладка Style - укажем стиль Drop Table. Теперь наш отчет готов к выполнению. Далее создадим страницу для отображенияотчета. Для этого добавим в проект новую aspx страницуconnect_to_db_padding.aspx на форму из панели инструментов Web forms добавимкомпоненту CrystalReportViewer. Для этого элемента выполним следующиенастройки: свойство ID=crPaging свойство DysplayGroupTree = False свойство EnableDrillDown= False. Для вызова созданного нами отчета необходимо вметод Page_Init нашей страницы добавитьинициализацию компоненты crPaging. Так как наш отчетображается к базе MS SQL Server, требующий авторизацииподключений, то так же необходимо обеспечитьавторизацию на SQL Server"е. Для этого после вызова метода InitializeComponent()введем следующий код:
В этом коде мы создаем объекты типа TableLogOnInfo иConnectionInfo, инициализируем их параметрамиподключения к базе данных, которые мы описали вфайле web.config. После этого загружаем в объект типа ReportDocument нашотчет, и присваиваем его в качестве источникаданных для объекта CrystalReportViewer. Так как у нас в документе отчета только однатаблица, то для нее мы присваиваем параметрыподключения, сохраненные нами в объектах типаTableLogOnInfo и ConnectionInfo. Примерный вид отчета приведенниже.
Подключение к базе данных MS SQL безпостраничного вывода записей отчетаВ предыдущем примере мы отображали отчет, вкотором выборка из базы данных отображаласьпорциями, разбитыми на страницы. Такой методотображения целесообразно применять для того,чтобы уменьшить время отображения страницы. Если же вам необходимо отображать всевыбранные записи, то для этого необходимодополнительно настроить объект CrystalReportEngine. В этом примере мы рассмотрим две возможностиподключения к файлам отчета - через модельпространства CrystalDecisions.Web и через функции API CrystalReport Engine пространства CrystalDecisions.CrystlReports.Engine. Для этого примера будем использовать тот жеотчет connectDatabase.rpt. Добавим в проект новый файл connect_to_db.aspx,разместим на нем объекты со следующиминазваниями кнопка btnFile - загружает отчет по имени файлаотчета кнопка btnEngine - загружает отчет на основеобъектной модели CrystalEngine объект crDataBase - объект для отображения отчета. Подключение отчета через объектнуюмодель пространства CrystalDecisions.Web В качестве отклика на нажатие мыши кнопки btnFileвведем следующую функцию:
Данная функция по имени файла загружает отчет вобъект crDataBase. Отличие от предыдущего примерсостоит в том, что у объекта crDataBase отключенавозможность отображения результатов выборки постраницам. Для этого в панели инструментов Propertires объектаcrDataBase установим поля DisplayGroupTree,DisplayToolBar,EnableDrillDown,SeparatePages в false.
Подключение отчета через объектнуюмодель пространства CrystalDecisions.CrystlReport.Engine В качестве отклика на нажатие мыши кнопки btnEngineвведем следующую функцию:
Единственное отличие в данном примеревышеуказанного метода подключения состоит вметоде инициализации объекта отчета
В данном случае документ отчетаинициализируется объектом класса connectionDatabase, имякоторого совпадает с именем файла отчета. Отчет на основе SQL запросаИсточником данных для создания отчета можетпослужить и обыкновенный SQL запрос. Для начала нужно создать в проекте новый файлотчета connectSQLQuerry.rpt и подключить SQL сервер к отчетучерез команду Database -> Add\Remove Database.
В качестве источника данных OLE DB (ADO) необходимоуказать наш SQL сервер, подключить базу NorthWind. Самже запрос необходимо вводить через команду Addcommand в блоке Available Data Sources Щелкните мышью на узле Add Command и введитеследующий SQL запрос select CompanyName,ContactName,Address fromdbo.Customers order by CompanyName Далее убедитесь, что все поля, перечисленные воператоре select, доступны в разделе DataBase Fields панелиинструментов Field Explorer. Далее воспользуйтесь мастером-генераторомотчетов и создайте простой табличный отчет извведенного запроса. Далее добавьте файл connect_to_sql_querry.aspx, в которомметод Page_Init модифицируйте следующим образом:
Создание отчета на основе хранимойпроцедурыИсточником данных для отчета может послужить ихранимая процедура. Для этого необходимонастроить подключение отчета к базе данных такимобразом, чтобы отчет мог работать с хранимымипроцедурами. Для этого создадим файл отчета connect_to_hpr.rpt, ивключим возможность отображения хранимыхпроцедур при подключении, щелкнув правойклавишей мыши на поле отчета и выбрав Desiner -> DefaultSettings -> Database. На этом окне выберем селектор StoredProcedure
Теперь ваш отчет может работать с хранимымипроцедурами вашего SQL сервера. Добавьте к отчету базу NorthWind вашего SQL сервера.вкачестве источника данных укажите хранимуюпроцедуру "Ten Most Expensive Products". Убедитесь, что всеполя, возвращаемые оператором select хранимойпроцедуры, присутствуют в Fields Explorer вашего отчета.Создайте простой текстовый отчет,воспользовавшись мастером отчетов Report Expert. Теперь добавим к проекту файл connect_to_hp.aspx, вкотором будем отображать результаты выборки изхранимой процедуры. Добавьте код инициализацииотчетав метод Page_Init, аналогичный предыдущему.Единственное отличие будет заключаться в именифайла загружаемого отчета rDoc.Load(Server.MapPath("reports\connect_to_hpr.rpt")) Параметризированный отчет сполями-параметрамиДо этого мы занимались полями таблиц илизапросов, добавленных в отчет, причем былоневозможно задать какой-нибудь параметр длядинамического изменения параметра запроса. Для того, чтобы можно было динамическиуправлять условиями выборки записей в запросеотчета, в Crystal Report существуют несколько способов. В данном примере мы будем использовать поляпараметры отчета из панели Fields Explorer. Мы будем использовать хранимую процедуру"Employee Sales by Country" базы NorthWind. Данная процедуравыбирает список продаж сотрудника в заданномвременном интервале. Добавьте в проект файл отчета connect_parameters.rpt,добавьте в качестве источника данных хранимуюпроцедуру базы "Employee Sales by Country" базы NorthWind. Ейнеобходимо передать в качестве параметровначало и конец интервала продаж. Для этого впанели Fields Explorer в разделе Parameter Fields добавьте дваполя - BeginingDate и EndingDate типа DateTime.
Для того, чтобы хранимая процедура могла имипользоваться, необходимо проинициализироватьэти параметры соответствующими значениями. Для этого добавим в проект страницуconnect_parameter.aspx. Разместим на ней два объекта Calendar,один - Button, один CrystalReportViewer. При их помощи мы будем устанавливать дату впараметрах отчета и генерировать отчет,соответствующий заданному интервалу. В качестве отклика на нажатие кнопки введитеследующий код
В данном примере инициализируются параметры@Ending_Date и @Beginning_Date отчета, после чего отчетзагружается для выполнения. Отчет с использованием фильтраУсловие на выборку записей из базы данных можнозадавать не только применением полей параметров. Для этого можно использовать возможностьуказания условия выбора в файле отчета rpt или припомощи объекта CrystalReportViewer. В данном примере реализуем обе возможности. Создадим новый файл отчета crystal_inreport.rpt. Вкачестве источника данных укажем таблицу Customersбазы NorthWind вашего сервера. Через Report Expert вкачестве полей, используемых в отчете, укажемследующие поля: CompanyName, ContactName, Address, City, Region. Country. Для указания условия выбора будем использоватьдиалог условия выбора записей отчета. Для этогощелкнем правой клавишей мыши на поле отчета ивыберем Report -> Edit Selection Formula -> Records. Откроетсяокно Record Selection Formula Editor. В поле для ввода условиявведите {Customers.Country}='Usa' . Для ввода условия можновоспользоваться деревом элементов Report Fields.Данное условие выбирает всех продавцов,проживающих в Америке и эквивалентно условию whereв операторе select. Для указания условия выбора записей при помощиобъекта CrystalReportViewer создадим новый файлconnect_outreport.rpt, подключим к нему базу NorthWind и укажемв качестве источника данных те же таблицы и поля. Далее создадим новую страницу connect_filter.aspx, вкоторую добавим два объекта типа Button и одинобъект типа CrystalReportViewer. Одному объекту типа Button дадим название btnInFilter ив качестве отклика на нажатие мыши введемследующий код
Этот код загружает из базы записи всехзаказчиков, проживающих в Америке. В принципе онничем не отличается от обыкновенной процедурызагрузки отчета, которую мы применяли раньше. Второму объекту Button дадим имя btnOutReport и вкачестве отклика на нажатие мыши введемследующий код
Данный код загружает всех заказчиков,проживающих в Великобритании. Условие на выборзадается оператором crFilter.SelectionFormula ="{Customers.Country}='UK'", которое эквивалентноуказанию условия выбора в файле отчета. Теперь при нажатии на кнопку btnInReport страницаотображает заказчиков Эти метода полезно использовать тогда, когдавам нужно задать условие на выбор записей из базыданных. Отчет на основе DataSetДо этого примера мы создавали отчеты, которые"вытягивали" данные из таблиц базы данных. Вэтом же примере мы будем использовать объектDataSet, который работает по принципу "втягивания"в себя данных. Мы создадим строго типизированныйDataSet, который послужит источником для отчета. Для начала добавим в проект страницу cdDS.aspx.добавим в нее объекты SqlDataConnection, SqlDataAdapter дляподключения к базе данных NorthWind. Наиболее простойпуть для этого - открыть Server Explorer, выбратьтаблицу Customers базы NorthWind вашего сервера иперетащить ее на рабочую область вашей страницы.Среда создаст два объекта SqlDataConnection1 и SqlDataAdapter1,которые обеспечивают возможность подключения ивыборки из базы данных. Переименуем их в connNorthWind иdaNorthWind.
Так же с панели Data на поле формы разместимобъект типа ReportDocument и дадим ему имя cbsMain.Впоследствии его будем использовать в качествеисточника документа отчета. Для создания набора данных обратимся кконструктору набора данных ADO.NET. Для этоговыберем в Solution Explorer и щелкнем правой клавишей наузле проекта и выберем Add - Add New Item. В поле Categoriesвыберем Data и создадим новый набор DataSet с именемdsNorthWind.xsd. Результат этих действий представленниже
Теперь в странице connect_ds.aspx сгенерируем строготипизированный DataSet. Для этого щелкнем на объектеdaCustomers и нажмем Generate Datase на панели Properties. Вдиалоге создания DataSet выберите уже созданныйнами crexamples.dsNorthWind.
Переименуйте полученный DataSet в dsMain. Убедитесь, что адаптер dsCustomers загружает всеполя таблицы Customers при помощи функции Preview Data. Теперь создадим отчет на основе созданногообъекта DataSet. Для этого добавим файл отчета cdDS.rpt внаш проект и откроем его в окне редактора. Далее вкачестве источника данных укажем созданный намиDataSet. Для этого через функцию Database -> Add/Remove DataBaseвызовем DataBase Explorer и укажем в нем в разделе ADO.NETDataSets созданный ранее dsNorthWind. Перенесем таблицуCustomers в блок Selected Tables. Теперь в отчете черезобъект dsNorhtWind будут доступны все поля таблицыCustomers. Далее, как и в предыдущих примерах, при помощиReport Expert задайте поля, отображаемые в отчете.Теперь наш отчет готов к выполнению. На странице connect_ds.aspx в качестве отклика насобытие Load в метод Page_Load введем следующиеизменения
В этом коде в объект dsMain загружается данные, Диаграммы в Crystal Report .NETВ данном примере рассмотрим возможность Мы построим диаграмму, отображающую сумму Для начала добавим в проект файл отчета Теперь запустим Report Expert и в качестве полей На закладке Group в качестве полей для В поле Total укажем поле Orders.Freight в качестве На закладке Style любой стиль отображения данных Теперь установим количество компаний, о
Теперь в отчете будут показываться первые пять Теперь добавим в отчет диаграмму. Для этого В диалоге Chart Expert на закладке Data в блоке On change of Таким образом мы создали диаграмму,
Далее добавим страницу для отображения отчета Код для загрузки отчета ничем не отличается от rDoc.Load(Server.MapPath("reports\connect_chart.rpt")) Ваша диаграмма будет следующего вида
Так можно добавить графические объекты в свой Литература о Crystal Report .NETПо генератору отчетов могу порекомендовать Девид Мак-Амис Профессиональная работа с Crystal Исходные примерыТекст исходных примеров можно скачать здесь |