添加子报表参数代码

现在即可向代码隐藏类添加子报表的参数代码。首先,要创建私有帮助器方法 SetDateRangeForOrders()。

  1. 打开 Web 或 Windows 窗体。

  2. 从“视图”菜单中,单击“代码”。

  3. 在类的顶部,在前一教程中所添加的现有 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";
    
  4. 在类的底部,创建一个名为 SetDateRangeForOrders() 的新私有方法,它有三个参数:ParameterFields、string startDate 和 string endDate。

    Private Sub SetDateRangeForOrders(ByVal myParameterFields As
    ParameterFields, ByVal startDate As String, ByVal endDate As
    String)
    
    End Sub
    
    private void SetDateRangeForOrders(ParameterFields parameterFields,
    string startDate, string endDate)
    {
    }
    
  5. 在此方法中,声明并实例化 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 类可访问,必须在代码隐藏类的顶部包含 &quot;Imports&quot; [Visual Basic] 或 &quot;using&quot; [C#] 语句,以引用 CrystalDecisions.Shared 命名空间。(之前在<a href="ms227453(v=vs.90).md">“项目设置”</a>中已添加此声明。)</p></td>
</tr>
</tbody>
</table>

``` vb
Dim myParameterRangeValue As ParameterRangeValue = New
ParameterRangeValue()
```

``` csharp
ParameterRangeValue parameterRangeValue = new
ParameterRangeValue();
```
  1. 将 ParameterRangeValue 实例的 StartValue 属性设置为 startDate 方法参数。
<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 类的 StartValue 和 EndValue 属性接受类型为 Object 的值。此一般类型允许传递多种类型的范围值,包括:文本、数字、日期、货币或时间。</p></td>
</tr>
</tbody>
</table>

``` vb
myParameterRangeValue.StartValue = startDate
```

``` csharp
parameterRangeValue.StartValue = startDate;
```
  1. 将 ParameterRangeValue 实例的 EndValue 属性设置为 endDate 方法参数。

    myParameterRangeValue.EndValue = endDate
    
    parameterRangeValue.EndValue = endDate;
    
  2. 将上限和下限设置为 bound-inclusive。

<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>BoundInclusive 表示上下区域值都包含在该区域中。</p></td>
</tr>
</tbody>
</table>

``` vb
myParameterRangeValue.LowerBoundType =
RangeBoundType.BoundInclusive
myParameterRangeValue.UpperBoundType =
RangeBoundType.BoundInclusive
```

``` csharp
parameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive;
parameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive;
```

现在即可将 ParameterRangeValue 实例赋给子报表的参数。
  1. 从 ParameterFields 索引类获取 ParameterField 实例,该索引类基于两个索引值:子报表参数字段名称和子报表名称。传递先前在该类顶部声明的两个常量值。

    Dim myParameterField As ParameterField =
    myParameterFields(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME)
    
    ParameterField parameterField =
    parameterFields[SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME];
    
  2. 调用 ParameterField 实例的 CurrentValues 属性的 Clear() 方法,以便从 CurrentValues 属性删除任何现有值。

    myParameterField.CurrentValues.Clear()
    
    parameterField.CurrentValues.Clear();
    
  3. 将先前创建的 ParameterRangeValue 实例添加到 ParameterField 实例的 CurrentValues 属性。

    myParameterField.CurrentValues.Add(myParameterRangeValue)
    
    parameterField.CurrentValues.Add(parameterRangeValue);
    

此过程在 ParameterRangeValue 实例中设置了开始和结束日期值,并把这些值传递到了 CustomerOrders 子报表中的 OrderDateRange 参数。