添加子报表参数代码

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

创建 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() 的新私有方法,它有三个参数: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)
    {
    }
    
  5. 在此方法中,声明并实例化 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 类可访问,必须在代码隐藏类的顶部包含 &quot;Imports&quot; [Visual Basic] 或 &quot;using&quot; [C#] 语句,以引用 CrystalDecisions.Shared 命名空间。(之前在<a href="ms227453(v=vs.90).md">“项目设置”</a>中已添加此声明。)</p></td>
</tr>
</tbody>
</table>
  1. 把 ParameterRangeValue 实例的 StartValue 属性设置为 startDate 方法参数。

    myParameterRangeValue.StartValue = startDate
    
    parameterRangeValue.StartValue = startDate;
    
    Note注意

    ParameterRangeValue 类的 StartValue 和 EndValue 属性接受对象类型的值。此一般类型允许传递多种类型的范围值,包括:文本、数字、日期、货币或时间。

  2. 将 ParameterRangeValue 实例的 EndValue 属性设置为 endDate 方法参数。

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

    myParameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive
    myParameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive
    
    parameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive;
    parameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive;
    
    Note注意

    BoundInclusive 表示上下区域值都包含在该区域中。

    现在即可将 ParameterRangeValue 实例赋给子报表的参数。

  4. 从 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;
```
  1. 从 ParameterFieldDefinitions 索引类获取 ParameterFieldDefinition 实例,该索引类基于两个索引值:子报表参数字段名称和子报表名称。传递先前在该类顶部声明的两个常量值。

    Dim myParameterFieldDefinition As ParameterFieldDefinition = myParameterFieldDefinitions(SUBREPORT_PARAMETER_FIELD_NAME,
    SUBREPORT_NAME)
    
    ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[SUBREPORT_PARAMETER_FIELD_NAME,
    SUBREPORT_NAME];
    
  2. 调用 ParameterFieldDefinition 实例的 CurrentValues 属性的 Clear() 方法,以便从 CurrentValues 属性删除任何现有值。

    myParameterFieldDefinition.CurrentValues.Clear()
    
    parameterFieldDefinition.CurrentValues.Clear();
    
  3. 将之前创建的 ParameterRangeValue 实例添加到 ParameterFieldDefinition 实例的 CurrentValues 属性。

    myParameterFieldDefinition.CurrentValues.Add(myParameterRangeValue)
    
    parameterFieldDefinition.CurrentValues.Add(parameterRangeValue);
    
  4. 调用 ApplyCurrentValues() 方法,对其传递 ParameterFieldDefinition 实例的 CurrentValues 属性。

    myParameterFieldDefinition.ApplyCurrentValues(myParameterFieldDefinition.CurrentValues)
    
    parameterFieldDefinition.ApplyCurrentValues(parameterFieldDefinition.CurrentValues);
    

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