附录:对子报表的范围参数代码的增强
您已成功修改了教程项目以使用包含子报表的报表,并对该子报表中创建的范围参数设置了订单日期范围。在此附录中,将了解如何用增强的 API 功能在子报表中读取和设置参数。
在先前的过程中,已学习了如何创建要使用 ParameterFieldDefinitions 和 ParameterFieldDefinition 类的 SetDateRangeForOrders() 帮助器方法。
在本教程中,必须删除使用 ParameterFieldDefinitions 和 ParameterFieldDefinition 类的代码行。然后,将学习如何使用增强的 Crystal Reports API 的 ParameterFields 和 ParameterField 类来编写 SetDateRangeForOrders() 方法的代码。
注意 |
---|
增强的 API 包含 SetParameterValue(string parameterFieldName, object value, string subreport) 方法,用于带离散参数字段的子报表。因此在本教程中不能使用 SetParameterValue(),因为子报表有范围参数。 |
对带范围参数的子报表使用增强 Crystal Reports API
必须按照“教程:读取和设置子报表的参数”中的说明创建一个项目。
打开在本教程中所完成的项目。
打开 Web 或 Windows 窗体。
从“视图”菜单中,单击“代码”。
在 SetDateRangeForOrders() 方法中,删除使用 ParameterFieldDefinitions 或 ParameterFieldDefinition 类的代码行。删除以下几行代码:
``` vb
Dim myParameterFieldDefinitions As ParameterFieldDefinitions = myReportDocument.DataDefinition.ParameterFields
Dim myParameterFieldDefinition As ParameterFieldDefinition = myParameterFieldDefinitions(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME)
myParameterFieldDefinition.CurrentValues.Clear()
myParameterFieldDefinition.CurrentValues.Add(myParameterRangeValue)
myParameterFieldDefinition.ApplyCurrentValues(myParameterFieldDefinition.CurrentValues)
```
``` csharp
ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields;
ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME];
parameterFieldDefinition.CurrentValues.Clear();
parameterFieldDefinition.CurrentValues.Add(parameterRangeValue);
parameterFieldDefinition.ApplyCurrentValues(parameterFieldDefinition.CurrentValues);
```
下一步,将把新的 Crystal Reports API 方法添加到 SetDateRangeForOrders() 方法中用于设置范围边界类型的代码后面。
在 SetDateRangeForOrders() 方法中,从 ReportDocument 实例的 ParameterFields 属性获取 ParameterFields 实例。
Dim myParameterFields As ParameterFields = reportDocument.ParameterFields
ParameterFields parameterFields = reportDocument.ParameterFields;
从 ParameterFields 索引类获取 ParameterField 实例,该索引类基于两个索引值:子报表参数字段名和子报表名。传递先前在该类顶部声明的两个常量值。
Dim myParameterField As ParameterField = myParameterFields(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME)
ParameterField parameterField = parameterFields[SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME];
调用 ParameterField 实例的 CurrentValues 属性的 Clear() 方法,以便从 CurrentValues 属性删除任何现有值。
``` vb
myParameterField.CurrentValues.Clear()
```
``` csharp
parameterField.CurrentValues.Clear();
```
将先前创建的 ParameterRangeValue 实例添加到 ParameterField 实例的 CurrentValues 属性。
myParameterField.CurrentValues.Add(myParameterRangeValue)
parameterField.CurrentValues.Add(parameterRangeValue);
现在即可生成并运行项目,以读取和设置子报表的范围参数。