|
создайте тогда строго типизированый DataSet и загрузите в него все данные из вашей процедуры, а уж на основе этого dataset и постройте отчет
[Ответить]
|
Правила использования | Политика защиты | Кодекс поведения © 2004 Корпорация Microsoft. Все права защищены. Разработка и поддержка: Metric, Parking.Ru |
hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=71692&im=105&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N");
hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N")
hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth)
hotlog_js="1.3"
hotlog_r+="&js="+hotlog_js; document.write(" |
|
|
|
|
Литература о Crystal Report .NET
По генератору отчетов могу порекомендовать следующую книгу
Девид Мак-Амис Профессиональная работа с Crystal Report .NET издательства Виллиамс.
Настройка сайта
Настройки сайта, общие для всех страниц, будем хранить в файле web.config
<appSettings>
<add key="server" value="vevv"/> <add key="database" value="Northwind"/> <add key="user" value="srs-user"/> <add key="password" value="12345"/> </appSettings>
Значения этих параметров говорят сами за себя - имя SQL сервера, название базы данных на сервере, имя пользователя базы данных пароль пользователя.
Отчет на основе 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.NET DataSets созданный ранее dsNorthWind. Перенесем таблицу Customers в блок Selected Tables. Теперь в отчете через объект dsNorhtWind будут доступны все поля таблицы Customers.
Далее, как и в предыдущих примерах, при помощи Report Expert задайте поля, отображаемые в отчете. Теперь наш отчет готов к выполнению.
На странице connect_ds.aspx в качестве отклика на событие Load в метод Page_Load введем следующие изменения
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
daCustomers.Fill(dsMain) cbsMain.SetDataSource(dsMain) crDS.ReportSource = cbsMain crDS.DataBind()
End Sub
В этом коде в объект dsMain загружается данные, после чего в объекте cbsMain типа ReportDocument в качестве источника данных указывается DataSet dsMain. Далее объект cbsMain подключается к объекту типа CrystalReportViewer и отображается на форме.
Отчет на основе SQL запроса
Источником данных для создания отчета может послужить и обыкновенный SQL запрос.
Для начала нужно создать в проекте новый файл отчета connectSQLQuerry.rpt и подключить SQL сервер к отчету через команду Database -> Add\Remove Database.
В качестве источника данных OLE DB (ADO) необходимо указать наш SQL сервер, подключить базу NorthWind. Сам же запрос необходимо вводить через команду Add command в блоке Available Data Sources
Щелкните мышью на узле Add Command и введите следующий SQL запрос
select CompanyName,ContactName,Address from dbo.Customers order by CompanyName
Далее убедитесь, что все поля, перечисленные в операторе select, доступны в разделе DataBase Fields панели инструментов Field Explorer.
Далее воспользуйтесь мастером-генератором отчетов и создайте простой табличный отчет из введенного запроса.
Далее добавьте файл connect_to_sql_querry.aspx, в котором метод Page_Init модифицируйте следующим образом:
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor.
InitializeComponent()
Dim log As New TableLogOnInfo Dim ci As New
ConnectionInfo
ci.ServerName = ConfigurationSettings.AppSettings("server") ci.DatabaseName = ConfigurationSettings.AppSettings("database") ci.UserID = ConfigurationSettings.AppSettings("user") ci.Password = ConfigurationSettings.AppSettings("password") log.ConnectionInfo = ci
Dim tbs As
Tables Dim tb As Engine.Table Dim rDoc As New ReportDocument
rDoc.Load(Server.MapPath("reports\connectSQLQuerry.rpt")) tbs = rDoc.Database.Tables tb = tbs(0) log = tb.LogOnInfo log.ConnectionInfo = ci tb.ApplyLogOnInfo(log)
crQuerry.ReportSource = rDoc crQuerry.DataBind()
End Sub
Отчет с использованием фильтра
Условие на выборку записей из базы данных можно задавать не только применением полей параметров.
Для этого можно использовать возможность указания условия выбора в файле отчета 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 и в качестве отклика на нажатие мыши введем следующий код
Private Sub btnInReport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnInReport.Click
Dim log As New TableLogOnInfo Dim ci As New
ConnectionInfo crFilter.Visible = True
ci.ServerName = ConfigurationSettings.AppSettings("server") ci.DatabaseName = ConfigurationSettings.AppSettings("database") ci.UserID = ConfigurationSettings.AppSettings("user") ci.Password = ConfigurationSettings.AppSettings("password") log.ConnectionInfo = ci
Dim tbs As
Tables Dim tb As Engine. Table Dim rDoc As New ReportDocument
crFilter.SelectionFormula = "" rDoc.Load(Server.MapPath("reports\connect_inreport.rpt")) crFilter.ReportSource = rDoc tbs = rDoc.Database.Tables
tb = tbs(0) log = tb.LogOnInfo log.ConnectionInfo = ci tb.ApplyLogOnInfo(log)
crFilter.DataBind()
End Sub
Этот код загружает из базы записи всех заказчиков, проживающих в Америке. В принципе он ничем не отличается от обыкновенной процедуры загрузки отчета, которую мы применяли раньше.
Второму объекту Button дадим имя btnOutReport и в качестве отклика на нажатие мыши введем следующий код
Private Sub
btnOutReport_Click(ByVal sender As
System.Object, ByVal e As
System.EventArgs) Handles btnOutReport.Click
crFilter.Visible = True Dim log As New
TableLogOnInfo Dim ci As New
ConnectionInfo
ci.ServerName = ConfigurationSettings.AppSettings("server") ci.DatabaseName = ConfigurationSettings.AppSettings("database") ci.UserID = ConfigurationSettings.AppSettings("user") ci.Password = ConfigurationSettings.AppSettings("password")
log.ConnectionInfo = ci
Dim tbs As
Tables Dim tb As Engine.Table Dim rDoc As New ReportDocument rDoc.Load(Server.MapPath("reports\connect_outreport.rpt")) crFilter.ReportSource = rDoc crFilter.SelectionFormula = "{Customers.Country}='UK'"
tbs = rDoc.Database.Tables tb = tbs(0) log = tb.LogOnInfo log.ConnectionInfo = ci tb.ApplyLogOnInfo(log)
crFilter.DataBind()
End Sub
Данный код загружает всех заказчиков, проживающих в Великобритании. Условие на выбор задается оператором crFilter.SelectionFormula = "{Customers.Country}='UK'", которое эквивалентно указанию условия выбора в файле отчета.
Теперь при нажатии на кнопку btnInReport страница отображает заказчиков
Эти метода полезно использовать тогда, когда вам нужно задать условие на выбор записей из базы данных.
Параметризированный отчет с полями-параметрами
До этого мы занимались полями таблиц или запросов, добавленных в отчет, причем было невозможно задать какой-нибудь параметр для динамического изменения параметра запроса.
Для того, чтобы можно было динамически управлять условиями выборки записей в запросе отчета, в 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.
При их помощи мы будем устанавливать дату в параметрах отчета и генерировать отчет, соответствующий заданному интервалу.
В качестве отклика на нажатие кнопки введите следующий код
Private Sub
btnParameter_Click(ByVal sender As
System.Object, ByVal e As
System.EventArgs) Handles btnParameter.Click
Dim log As New TableLogOnInfo Dim ci As New
ConnectionInfo
ci.ServerName = ConfigurationSettings.AppSettings("server") ci.DatabaseName = ConfigurationSettings.AppSettings("database") ci.UserID = ConfigurationSettings.AppSettings("user") ci.Password = ConfigurationSettings.AppSettings("password") log.ConnectionInfo = ci
Dim tbs As
Tables Dim tb As Engine.Table Dim rDoc As New ReportDocument
rDoc.Load(Server.MapPath("reports\connect_parameters.rpt")) crParameter.ReportSource = rDoc
Dim pr As
ParameterField Dim dv As New
ParameterDiscreteValue
pr = crParameter.ParameterFieldInfo.Item("@Ending_Date") dv = New ParameterDiscreteValue dv.Value = cldEnd.SelectedDate.ToShortDateString.ToString(New
System.Globalization.CultureInfo("ru-ru")) pr.CurrentValues.Add(dv)
dv = New ParameterDiscreteValue dv.Value = cldBegin.SelectedDate.ToShortDateString.ToString(New
System.Globalization.CultureInfo("ru-ru")) pr = crParameter.ParameterFieldInfo.Item("@Beginning_Date") pr.CurrentValues.Add(dv)
tbs = rDoc.Database.Tables tb = tbs(0) log = tb.LogOnInfo log.ConnectionInfo = ci tb.ApplyLogOnInfo(log)
crParameter.DataBind()
End Sub
В данном примере инициализируются параметры @Ending_Date и @Beginning_Date отчета, после чего отчет загружается для выполнения.
Подключение к базе данных MS SQL без постраничного вывода записей отчета
В предыдущем примере мы отображали отчет, в котором выборка из базы данных отображалась порциями, разбитыми на страницы. Такой метод отображения целесообразно применять для того, чтобы уменьшить время отображения страницы.
Если же вам необходимо отображать все выбранные записи, то для этого необходимо дополнительно настроить объект CrystalReportEngine.
В этом примере мы рассмотрим две возможности подключения к файлам отчета – через модель пространства CrystalDecisions.Web и через функции API Crystal Report Engine пространства CrystalDecisions.CrystlReports.Engine.
Для этого примера будем использовать тот же отчет connectDatabase.rpt.
Добавим в проект новый файл connect_to_db.aspx, разместим на нем объекты со следующими названиями
кнопка btnFile - загружает отчет по имени файла отчета
кнопка btnEngine – загружает отчет на основе объектной модели CrystalEngine
объект crDataBase – объект для отображения отчета.
Подключение к базе данных с постраничным выводом запроса
Для создания нового файла отчета необходимо выбрать в Solution Explorer щелкнуть правой клавишей мыши на узле проекта и выбрать следующий пункт меню – Add -> Add New Item и ввести в качестве имени файла connectDatabase.rpt.
После добавления файла отчета откройте его в среде.
На следующем шаге необходимо добавить подключение к базе данных, откуда отчет будет брать данные.
В качестве источника данных будем использовать Microsoft OLE DB Provider for SQL Server.
Щелкните правой клавишей мыши на поле отчета и выберите Database -> Add\Remove Database -> OLDE DB (ADO). При раскрытии этого узла появиться мастер для подключения базы данных SQL сервера. Заполните все необходимые поля, и убедитесь, что в блоке Available Data 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() введем следующий код:
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor.
InitializeComponent() Dim log As New TableLogOnInfo Dim ci As New ConnectionInfo ci.ServerName = ConfigurationSettings.AppSettings("server") ci.DatabaseName = ConfigurationSettings.AppSettings("database") ci.UserID = ConfigurationSettings.AppSettings("user") ci.Password = ConfigurationSettings.AppSettings("password") log.ConnectionInfo = ci
Dim tbs As Tables Dim tb As
Engine.Table Dim rDoc As New ReportDocument rDoc.Load(Server.MapPath("reports\connectDatabase.rpt")) crPaging.ReportSource = rDoc tbs = rDoc.Database.Tables tb = tbs(0) log = tb.LogOnInfo log.ConnectionInfo = ci tb.ApplyLogOnInfo(log) crPaging.DataBind()
End Sub
В этом коде мы создаем объекты типа TableLogOnInfo и ConnectionInfo, инициализируем их параметрами подключения к базе данных, которые мы описали в файле web.config.
После этого загружаем в объект типа ReportDocument наш отчет, и присваиваем его в качестве источника данных для объекта CrystalReportViewer.
Так как у нас в документе отчета только одна таблица, то для нее мы присваиваем параметры подключения, сохраненные нами в объектах типа TableLogOnInfo и ConnectionInfo. Примерный вид отчета приведен ниже.
Подключение отчета через объектную модель пространства CrystalDecisions.Web
В качестве отклика на нажатие мыши кнопки btnFile введем следующую функцию:
Private Sub btnFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnFile.Click
Dim log As New TableLogOnInfo Dim ci As New ConnectionInfo
ci.ServerName = ConfigurationSettings.AppSettings("server") ci.DatabaseName = ConfigurationSettings.AppSettings("database") ci.UserID = ConfigurationSettings.AppSettings("user") ci.Password = ConfigurationSettings.AppSettings("password") log.ConnectionInfo = ci
Dim tbs As Tables Dim tb As
Engine.Table Dim rDoc As New ReportDocument rDoc.Load(Server.MapPath("reports\connectDatabase.rpt")) crDataBase.ReportSource = rDoc
tbs = rDoc.Database.Tables tb = tbs(0) log = tb.LogOnInfo log.ConnectionInfo = ci
tb.ApplyLogOnInfo(log) crDataBase.DataBind() crDataBase.Visible = True
End Sub
Данная функция по имени файла загружает отчет в объект crDataBase. Отличие от предыдущего пример состоит в том, что у объекта crDataBase отключена возможность отображения результатов выборки по страницам.
Для этого в панели инструментов Propertires объекта crDataBase установим поля DisplayGroupTree, DisplayToolBar,EnableDrillDown,SeparatePages в false.
DisplayGroupTree |
Включает\выключает отображение дерева детализации выборки |
DisplayToolBar |
Включает\выключает отображение панели инструментов отчета |
EnableDrillDown |
Включает\выключает возможность детализации отчета |
SeparatePages |
Включает\выключает разбиение на страницы отчета |
В качестве отклика на нажатие мыши кнопки btnEngine введем следующую функцию:
Private Sub
btnEngine_Click(ByVal sender As
System.Object, ByVal e As
System.EventArgs) Handles btnEngine.Click
Dim log As New TableLogOnInfo Dim ci As New
ConnectionInfo
ci.ServerName = ConfigurationSettings.AppSettings("server") ci.DatabaseName = ConfigurationSettings.AppSettings("database") ci.UserID = ConfigurationSettings.AppSettings("user") ci.Password = ConfigurationSettings.AppSettings("password") log.ConnectionInfo = ci
Dim tbs As
Tables Dim tb As Engine.Table Dim rDoc As New connectDatabase
tbs = rDoc.Database.Tables tb = tbs(0) log = tb.LogOnInfo log.ConnectionInfo = ci tb.ApplyLogOnInfo(log)
crDataBase.ReportSource = rDoc crDataBase.DataBind() crDataBase.Visible = True
End Sub
Единственное отличие в данном примере вышеуказанного метода подключения состоит в методе инициализации объекта отчета
Dim rDoc As New connectDatabase
tbs = rDoc.Database.Tables
В данном случае документ отчета инициализируется объектом класса connectionDatabase, имя которого совпадает с именем файла отчета.
Создание отчета на основе хранимой процедуры
Источником данных для отчета может послужить и хранимая процедура. Для этого необходимо настроить подключение отчета к базе данных таким образом, чтобы отчет мог работать с хранимыми процедурами.
Для этого создадим файл отчета connect_to_hpr.rpt, и включим возможность отображения хранимых процедур при подключении, щелкнув правой клавишей мыши на поле отчета и выбрав Desiner -> Default Settings -> Database. На этом окне выберем селектор Stored Procedure
Теперь ваш отчет может работать с хранимыми процедурами вашего 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
Популярный пакет генератора отчетов Crystal Report предназначен для создания отчетов презентабельного вида различного типа: табличные запросы к базам данных, сводные диаграммы, OLAP данные. Версия Crystal Report .NET несколько ограничена в возможностях по сравнению с Crystal Report, поставляемым как отдельное приложение, но тем не менее она позволяет реализовать широкий спектр отчетов для Windows и Web приложений.