Параметризированный отчет с полями-параметрами
До этого мы занимались полями таблиц или запросов, добавленных в отчет, причем было невозможно задать какой-нибудь параметр для динамического изменения параметра запроса.
Для того, чтобы можно было динамически управлять условиями выборки записей в запросе отчета, в 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 отчета, после чего отчет загружается для выполнения.