如果您创建了前一教程介绍的“教程:读取和设置离散参数”并且包含了 Session 持久性,请学习以下过程。否则,继续前进到“修改排除 Session 持久性的方法”部分。
修改包含 Session 持久性的 ConfigureCrystalReports() 方法
在 ConfigureCrystalReports() 方法中,在声明并实例化 ArrayList 的代码后面创建几行。
在这几行中,声明两个字符串变量 startDate 和 endDate。
Dim startDate As String Dim endDate As Stringstring startDate; string endDate;在 Not IsPostBack 条件块中,输入 startDate 和 endDate 变量的默认值。
``` vb
startDate = "8/1/1997"
endDate = "8/31/1997"
```
``` csharp
startDate = "8/1/1997";
endDate = "8/31/1997";
```
- 在 Not IsPostBack 条件块中,将 startDate 和 endDate 变量赋给 Session。
``` vb
Session("startDate") = startDate
Session("endDate") = endDate
```
``` csharp
Session["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 变量赋值的并行逻辑。
- 在调用 SetCurrentValuesForParameterField() 的代码下面,调用 SetDateRangeForOrders() 方法并传递 ParameterFields 实例和 startDate 与 endDate 变量。
``` vb
SetDateRangeForOrders(myParameterFields, startDate, endDate)
```
``` csharp
SetDateRangeForOrders(parameterFields, startDate, endDate);
```
- 从“文件”菜单中选择“全部保存”。
修改包含 Session 持久性的 redisplay_Click() 方法
现在将修改 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 值重置了子报表中的范围参数。