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