如果您创建了前一教程介绍的“教程:读取和设置离散参数”并且包含了 Session 持久性,请学习以下过程。否则,继续前进到“修改排除 Session 持久性的方法”部分。
修改包含 Session 持久性的 ConfigureCrystalReports() 方法
在 ConfigureCrystalReports() 方法中,在声明并实例化 ArrayList 的代码后面创建几行。
在这几行中,声明两个字符串变量 startDate 和 endDate。
Dim startDate As String Dim endDate As Stringstring startDate; string endDate;在 Not IsPostBack 条件块中,输入 startDate 和 endDate 变量的默认值。
startDate = "8/1/1997" endDate = "8/31/1997"startDate = "8/1/1997"; endDate = "8/31/1997";在 Not IsPostBack 条件块中,将 startDate 和 endDate 变量赋给 Session。
Session("startDate") = startDate Session("endDate") = endDateSession["startDate"] = startDate; Session["endDate"] = endDate;在 Else 块中,在从 Session 中获得 ArrayList 实例以后,从 Session 获取 startDate 和 endDate 变量。
``` vb
startDate = Session("startDate").ToString()
endDate = Session("endDate").ToString()
```
``` csharp
startDate = Session["startDate"].ToString();
endDate = Session["endDate"].ToString();
```
使用该方法,在任何一种情况下,到达块末尾时均已对日期变量赋值。这遵循了在前一教程中配置的 ArrayList 变量赋值的并行逻辑。
在将报表绑定到 CrystalReportViewer 控件的代码行上方创建几行。
在这些新行中,输入对 SetDateRangeForOrders() 方法的调用,并将 CustomersByCity 报表和 startDate 与 endDate 变量传入其中。
SetDateRangeForOrders(customersByCityReport, startDate, endDate)SetDateRangeForOrders(customersByCityReport, startDate, endDate);这些代码之后即是将报表绑定到 CrystalReportViewer 控件的原始代码。
从“文件”菜单中选择“全部保存”。
接下来将修改 redisplay_Click 事件方法。
修改包含 Session 持久性的 redisplay_Click() 方法
在 redisplay_Click() 事件方法中,在将 ArrayList 实例赋给 Session 的代码行后面创建几行。
在这几行中,将 orderStartDate TextBox 和 orderEndDate TextBox 的 Text 属性赋给 Session 变量。
Session("startDate") = orderStartDate.Text Session("endDate") = orderEndDate.TextSession["startDate"] = orderStartDate.Text; Session["endDate"] = orderEndDate.Text;从“文件”菜单中选择“全部保存”。
现在当调用 ConfigureCrystalReports() 方法时,会获取并应用这些 startDate 和 endDate Session 值。
现在即可生成并运行项目,以验证 TextBox 值重置了子报表中的范围参数。w