添加子报表参数代码
现在即可向代码隐藏类添加子报表的参数代码。首先,要创建私有帮助器方法 SetDateRangeForOrders()。
创建 SetDateRangeForOrders() 方法并编写其代码
打开 Web 或 Windows 窗体。
从“视图”菜单中,单击“代码”。
在类的顶部,在前一教程中所添加的 PARAMETER_FIELD_NAME 常量下面添加两个新常量。
Private Const SUBREPORT_PARAMETER_FIELD_NAME As String = "OrderDateRange" Private Const SUBREPORT_NAME As String = "CustomerOrders"
private const string SUBREPORT_PARAMETER_FIELD_NAME = "OrderDateRange"; private const string SUBREPORT_NAME = "CustomerOrders";
在类的底部,创建名为 SetDateRangeForOrders() 的新私有方法,它有三个参数:ReportDocument、字符串型 startDate 和字符串型 endDate。
Private Sub SetDateRangeForOrders(ByVal myReportDocument As ReportDocument, ByVal startDate As String, ByVal endDate As String) End Sub
private void SetDateRangeForOrders(ReportDocument reportDocument, string startDate, string endDate) { }
在此方法中,声明并实例化 ParameterRangeValue 类。
``` vb
Dim myParameterRangeValue As ParameterRangeValue = New
ParameterRangeValue()
```
``` csharp
ParameterRangeValue parameterRangeValue = new
ParameterRangeValue();
```
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,VS.90).gif" alt="Note" class="note" />注意</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>要使 ParameterRangeValue 类可访问,必须在代码隐藏类的顶部包含 "Imports" [Visual Basic] 或 "using" [C#] 语句,以引用 CrystalDecisions.Shared 命名空间。(之前在<a href="ms227453(v=vs.90).md">“项目设置”</a>中已添加此声明。)</p></td>
</tr>
</tbody>
</table>
把 ParameterRangeValue 实例的 StartValue 属性设置为 startDate 方法参数。
myParameterRangeValue.StartValue = startDate
parameterRangeValue.StartValue = startDate;
注意 ParameterRangeValue 类的 StartValue 和 EndValue 属性接受对象类型的值。此一般类型允许传递多种类型的范围值,包括:文本、数字、日期、货币或时间。
将 ParameterRangeValue 实例的 EndValue 属性设置为 endDate 方法参数。
myParameterRangeValue.EndValue = endDate
parameterRangeValue.EndValue = endDate;
将上限和下限设置为 bound-inclusive。
myParameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive myParameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive
parameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive; parameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive;
注意 BoundInclusive 表示上下区域值都包含在该区域中。
现在即可将 ParameterRangeValue 实例赋给子报表的参数。
从 ReportDocument 实例的 DataDefinition 属性获取 ParameterFieldDefinitions 对象。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,VS.90).gif" alt="Note" class="note" />注意</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>ParameterFieldDefinitions 是包含 ParameterFieldDefinition 类实例的索引类。</p></td>
</tr>
</tbody>
</table>
``` vb
Dim myParameterFieldDefinitions As ParameterFieldDefinitions = myReportDocument.DataDefinition.ParameterFields
```
``` csharp
ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields;
```
从 ParameterFieldDefinitions 索引类获取 ParameterFieldDefinition 实例,该索引类基于两个索引值:子报表参数字段名称和子报表名称。传递先前在该类顶部声明的两个常量值。
Dim myParameterFieldDefinition As ParameterFieldDefinition = myParameterFieldDefinitions(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME)
ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME];
调用 ParameterFieldDefinition 实例的 CurrentValues 属性的 Clear() 方法,以便从 CurrentValues 属性删除任何现有值。
myParameterFieldDefinition.CurrentValues.Clear()
parameterFieldDefinition.CurrentValues.Clear();
将之前创建的 ParameterRangeValue 实例添加到 ParameterFieldDefinition 实例的 CurrentValues 属性。
myParameterFieldDefinition.CurrentValues.Add(myParameterRangeValue)
parameterFieldDefinition.CurrentValues.Add(parameterRangeValue);
调用 ApplyCurrentValues() 方法,对其传递 ParameterFieldDefinition 实例的 CurrentValues 属性。
myParameterFieldDefinition.ApplyCurrentValues(myParameterFieldDefinition.CurrentValues)
parameterFieldDefinition.ApplyCurrentValues(parameterFieldDefinition.CurrentValues);
此过程在 ParameterRangeValue 实例中设置了开始和结束日期值,并把这些值传递到了 CustomerOrders 子报表中的 OrderDateRange 参数。