水晶报表参数编程示例代码(作者:海波.NET,更新:2003-10-21-1) Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine Private Const RPT_NAME As String = "CustomerOrders.rpt"
Private Const PARAMETER_FIELD_NAME As String = "CustomerID" Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码 ' 设置报表源
report = New ReportDocument()
report.Load(GetReportPath(RPT_NAME)) ' 设置参数
crvOrders.ParameterFieldInfo = GetParameterInfo(CType(Session("list"), ListItemCollection)) crvOrders.ReportSource = report ' 显示报表
crvOrders.DataBind() End Sub
'----------------------------------------------------------------
' Function GetParameterInfo:
' 从复选框列表获取参数字段信息
' Returns:
' 参数字段
' Parameters:
' [in] list: 复选框列表
' Throws:
'
' PreConditions:
'
'----------------------------------------------------------------
Private Function GetParameterInfo(ByVal list As ListItemCollection) As ParameterFields Dim item As ListItem
Dim isEmpty As Boolean = True
Dim itemCount As Integer = 0 ' 声明将参数传递给查看器控件所需的变量。
Dim paramFields As New ParameterFields()
Dim paramField As New ParameterField()
Dim discreteVal As New ParameterDiscreteValue() ' 参数是具有多个值的离散参数。 ' 设置参数字段的名称,它必须和报表中的参数相符。
paramField.ParameterFieldName = PARAMETER_FIELD_NAME For Each item In list
If item.Selected Then
isEmpty = False
itemCount += 1 ' 设置一个离散值并将其传递给该参数
discreteVal.Value = item.Value
paramField.CurrentValues.Add(discreteVal)
' 新建一个离散值
discreteVal = New ParameterDiscreteValue()
End If
Next If isEmpty Then
For Each item In list
' 设置一个离散值并将其传递给该参数
discreteVal.Value = item.Value
paramField.CurrentValues.Add(discreteVal)
' 新建一个离散值
discreteVal = New ParameterDiscreteValue()
Next
End If ' 将该参数添加到参数字段集合。
paramFields.Add(paramField)
GetParameterInfo = paramFields End Function
Imports CrystalDecisions.CrystalReports.Engine Private Const RPT_NAME As String = "CustomerOrders.rpt"
Private Const PARAMETER_FIELD_NAME As String = "CustomerID" Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码 ' 设置报表源
report = New ReportDocument()
report.Load(GetReportPath(RPT_NAME)) ' 设置参数
crvOrders.ParameterFieldInfo = GetParameterInfo(CType(Session("list"), ListItemCollection)) crvOrders.ReportSource = report ' 显示报表
crvOrders.DataBind() End Sub
'----------------------------------------------------------------
' Function GetParameterInfo:
' 从复选框列表获取参数字段信息
' Returns:
' 参数字段
' Parameters:
' [in] list: 复选框列表
' Throws:
'
' PreConditions:
'
'----------------------------------------------------------------
Private Function GetParameterInfo(ByVal list As ListItemCollection) As ParameterFields Dim item As ListItem
Dim isEmpty As Boolean = True
Dim itemCount As Integer = 0 ' 声明将参数传递给查看器控件所需的变量。
Dim paramFields As New ParameterFields()
Dim paramField As New ParameterField()
Dim discreteVal As New ParameterDiscreteValue() ' 参数是具有多个值的离散参数。 ' 设置参数字段的名称,它必须和报表中的参数相符。
paramField.ParameterFieldName = PARAMETER_FIELD_NAME For Each item In list
If item.Selected Then
isEmpty = False
itemCount += 1 ' 设置一个离散值并将其传递给该参数
discreteVal.Value = item.Value
paramField.CurrentValues.Add(discreteVal)
' 新建一个离散值
discreteVal = New ParameterDiscreteValue()
End If
Next If isEmpty Then
For Each item In list
' 设置一个离散值并将其传递给该参数
discreteVal.Value = item.Value
paramField.CurrentValues.Add(discreteVal)
' 新建一个离散值
discreteVal = New ParameterDiscreteValue()
Next
End If ' 将该参数添加到参数字段集合。
paramFields.Add(paramField)
GetParameterInfo = paramFields End Function
通过 CrystalReportViewer.ParameterFieldInfo 属性……1、CrystalReportViewer 成员
公共实例属性
ParameterFieldInfo(从 CrystalReportViewerbase 继承) ParameterFields。获取或设置参数字段集合。 二、ReportDocument
通过 ReportDocument.DataDefinition.ParameterFields 属性……1、ReportDocument 成员
公共实例属性
DataDefinition DataDefinition。获取 DataDefinition 对象。 2、DataDefinition 成员
公共实例属性
ParameterFields ParameterFieldDefinitions。获取 ParameterFieldDefinitions 集合。 三、参数字段运行时自定义(CrystalReportViewer)参考:
设置参数 | Windows 窗体查看器的绑定选项 | Web 窗体查看器的绑定选项 可支持用户在 Crystal 报表中通过参数进行输入。这种参数有多种用途。例如:
使参数基于数据库字段并允许用户指定该字段的值,以便对报表中的数据进行筛选。
使用参数字段将条件格式应用于报表。
使用参数字段来定义排序顺序。
下列示例说明如何在运行时通过代码设置参数字段值。此例解释了如何设置两个不同的参数:第一个是多值离散参数,第二个是区域值参数。在运行时修改参数字段[Visual Basic]
' 声明将参数传递给
'查看器控件所需的变量。
Dim paramFields As New ParameterFields()
Dim paramField As New ParameterField()
Dim discreteVal As New ParameterDiscreteValue()
Dim rangeVal As New ParameterRangeValue()' 第一个参数是具有多个值的离散参数。' 设置参数字段的名称,它必须
'和报表中的参数相符。
paramField.ParameterFieldName = "客户姓名"' 设置第一个离散值并将其传递给该参数
discreteVal.Value = "AIC Childrens"
paramField.CurrentValues.Add(discreteVal)' 设置第二个离散值并将其传递给该参数。
' discreteVal 变量被设置为新值,这样,以前的设置
'就不会被覆盖。
discreteVal = New ParameterDiscreteValue()
discreteVal.Value = "Aruba Sport"
paramField.CurrentValues.Add(discreteVal)' 将该参数添加到参数字段集合。
paramFields.Add(paramField)' 第二个参数为区域值。paramField 变量
'被设置为新值,这样,以前的设置就不会被覆盖。
paramField = New ParameterField()' 设置参数字段的名称,它必须
'和报表中的参数相符。
paramField.ParameterFieldName = "客户 ID"' 设置区域的开始值和结束值并将区域传递给该参数。
rangeVal.StartValue = 42
rangeVal.EndValue = 72
paramField.CurrentValues.Add(rangeVal)' 将第二个参数添加到参数字段集合。
paramFields.Add(paramField)' 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFieldscrystalReportViewer1.ReportSource = "c:\reports\my report.rpt"[C#]
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue rangeVal = new ParameterRangeValue ();// 第一个参数是具有多个值的离散参数。// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户姓名";// 设置第一个离散值并将其传递给该参数。
discreteVal.Value = "AIC Childrens";
paramField.CurrentValues.Add (discreteVal);// 设置第二个离散值并将其传递给该参数。
// discreteVal 变量被设置为新值,这样,以前的设置
//就不会被覆盖。
discreteVal = new ParameterDiscreteValue ();
discreteVal.Value = "Aruba Sport";
paramField.CurrentValues.Add (discreteVal);// 将该参数添加到参数字段集合。
paramFields.Add (paramField);// 第二个参数为区域值。paramField 变量
//被设置为新值,这样,以前的设置就不会被覆盖。
paramField = new ParameterField ();// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户 ID";// 设置范围的开始值和结束值并将该范围传递给
//该参数。
rangeVal.StartValue = 42;
rangeVal.EndValue = 72;
paramField.CurrentValues.Add (rangeVal);// 将第二个参数添加到参数字段集合。
paramFields.Add (paramField);// 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields;[C++]
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields* paramFields = new ParameterFields ();
ParameterField* paramField = new ParameterField ();
ParameterDiscreteValue* discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue* rangeVal = new ParameterRangeValue ();// 第一个参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField->ParameterFieldName = "客户姓名";// 设置第一个离散值并将其传递给该参数。
String* val = "AIC Childrens";
discreteVal->Value = val;
paramField->CurrentValues->Add (discreteVal);// 设置第二个离散值并将其传递给该参数。
// discreteVal 变量被设置为新值,这样,以前的设置
//就不会被覆盖。
discreteVal = new ParameterDiscreteValue ();
val = "Aruba Sport";
discreteVal->Value = val;
paramField->CurrentValues->Add (discreteVal);// 将该参数添加到参数字段集合。
paramFields->Add (paramField);// 第二个参数为区域值。paramField 变量
//被设置为新值,这样,以前的设置就不会被覆盖。
paramField = new ParameterField ();// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField->ParameterFieldName = "客户 ID";// 设置范围的开始值和结束值并将该范围传递给
//该参数。
rangeVal->StartValue = __box(42);
rangeVal->EndValue = __box(72);
paramField->CurrentValues->Add (rangeVal);// 将第二个参数添加到参数字段集合。
paramFields->Add (paramField);// 将参数字段集合放入查看器控件。
crystalReportViewer1->ParameterFieldInfo = paramFields;crystalReportViewer1->ExportReport();