问题:
使用参数
——————————————————————————————————————
目录
1、设置参数请参见
2、设计参数字段请参见
3、将参数合并到公式参数字段不必放入报表中即可在记录或组选定公式中使用。创建参数字段,然后像插入其他字段那样将其输入到公式中。
4、参数字段运行时自定义
——————————————————————————————————————
1、设置参数请参见参数提示报表用户输入信息。将参数看作是在报表生成之前用户需要回答的问题。用户输入的信息或用户响应的方式决定报表的内容。例如,在销售人员使用的报表中,或许有要求用户选择地区的参数。该报表将返回特定地区的结果,而不是返回所有地区的结果。通过在公式、选定公式和报表中使用参数字段,可创建单个报表,并可随时根据需要对其进行修改。参数字段也可用于子报表。参数字段注意事项
使用参数字段时,需要注意下列事项: 若要通过参数提示用户,您必须将该参数包含在报表中某个位置(如记录选定、组选定或公式中)或直接将该参数作为报表中的字段。 
参数字段不必放入报表中即可在记录或组选定公式中使用。创建参数字段,然后像插入其他字段那样将其输入到公式中。 
参数字段必须与要比较字段的数据类型相同。例如,如果报表中使用类型为字符串的 {客户姓名} 字段将记录选定限制为特定的客户名称,则为此目的创建的参数字段也必须为字符串类型。 
参数字段支持下列数据类型: 
数据类型 解释 参数示例 
布尔值 要求回答是/否或真/假。 在摘要中包括计划预算数吗? 
货币 要求一个美元金额。 显示销售额超过 XXXXX 的客户。 
日期 要求采用日期格式回答。 输入季度的开始和结束日期。 
日期和时间 要求日期和时间。 显示 07/04/2000 1:00pm-2:00pm 之间的统计。 
数字 要求一个数值。 输入客户标识号。 
字符串 要求回答文本。 输入地区。 
时间 要求使用时间格式回答。 显示 1:00pm-2:00pm 之间的呼叫总数。 可以为用户创建选择参数值的选取列表,而不是让用户手动输入参数值。 
参数字段提示文本可长达四行,每行大约 60-70 个字符(取决于字符宽度,最多可以有 254 个字符)。文本长度超过一行将自动换行。 
——————————————————————————————————————
2、设计参数字段请参见
若要通过参数提示用户,您必须将该参数包含在报表中某个位置(如记录选定、组选定或公式中)或直接将该参数作为报表中的字段。设计参数字段 在字段资源管理器中,右击“参数字段”并单击“新建”。 
在“名称”字段中输入参数的名称(最多 255 个字母数字字符)。 
在“提示文本”字段中输入想要的提示文本(最多 255 个字母数字字符)。 
这是在刷新报表后,出现在“输入参数值”对话框中的文本。 输入“值类型”。 
如果想限制或为用户指定选项,请单击“设置默认值”。 
在“设置默认值”对话框中,为参数值指定表和字段。 
单击“>>”将所有的值移动到“默认值”区域。 
用户将能够选择您移动到“默认值”区域中的任何值。如果想限制选定范围,只移动希望用户从中进行选择的值。 提示   对于要为其设置默认值的字符串参数字段,可选择在“编辑掩码”字段中输入编辑掩码,而不是指定范围。
单击“确定”按钮。 
出现“创建参数字段”对话框。 单击“确定”按钮。 
将参数拖放到报表中。 
——————————————————————————————————————
3、将参数合并到公式参数字段不必放入报表中即可在记录或组选定公式中使用。创建参数字段,然后像插入其他字段那样将其输入到公式中。用公式进行记录选定
若要减少从数据库服务器传输的数据量并改善性能,请将参数字段直接合并到记录选定公式中。 下面的记录选定公式提请用户输入销售配额,并只显示去年销售额超过销售配额的所有客户。{客户.去年销售额} > {?SalesQuota}
用参数字段进行排序和分组
该 Crystal 语法公式合并参数 ?group,提示用户选择“客户”或“组”作为其组选项。UpperCase 函数将参数值转换为大写以便保持一致。 WhileReadingRecords;
If UpperCase ({?group})= "客户" then
    {客户.客户姓名}
Else if UpperCase ({?group}) = "地区" then
    {??.地区} 
用参数字段进行条件格式化
参数字段可用于创建条件格式化公式。可以使用条件格式化公式用颜色标记符合某些条件的数据。如果您用来标记这些项的条件从不更改,则不必使用参数字段,而可以使用公式或条件格式化。 该 Crystal 语法公式合并参数 ?SalesTarget,提示用户输入销售目标值。超过销售目标值的所有客户在报表中均以红色显示。If {客户.去年销售额} > {?SalesTarget} Then
    Red
Else
    Black
——————————————————————————————————————
4、参数字段运行时自定义可支持用户在 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"

解决方案 »

  1.   

    大家一起到这里支持一下!!!
    http://expert.csdn.net/Expert/TopicView1.asp?id=2291055
    CSDN 开个 Crystal Report 版吧!!!&&&我与水晶报表……
    haibodotnet 海波.NET
      

  2.   

    不好意思,我还不太理解你写的在运行时修改参数字段的方法我的想法是在程序中动态地改变crystalreport的数据库字段及组字段,这样
    使得图表和报表作相应的变化
    也就是修改DataDefinition中的Groups、SortFields等字段,但是程序中那些
    fieldname不允许我修改,所以我想问一下处理方法海波你的论坛我去过了,但是还是没有解决
    可能我没有领会其中的方法请高手帮忙,感激不尽!
      

  3.   

    给段测试成功的代码:
    (1)设计报表时,用"数据库专家->创建新连接->ADO.NET"选定先前生成的数据集dsSurvey.xsd文件。
    (2)动态填充数据集dsSurvey1中的表Temp_ChoiceQuestion
    daChoiceQuestion.SelectCommand.Parameters[0].Value=dSurveyPK.ToString();
    dsSurvey1.Temp_ChoiceQuestion.Clear();
    daChoiceQuestion.Fill(dsSurvey1,"Temp_ChoiceQuestion");(3)运行时动态设定报表数据源
    RptSurvey rptSurvey=new RptSurvey();
    rptSurvey.SetDataSource(dsSurvey1);
    crystalReportViewer1.ReportSource = rptSurvey;
    crystalReportViewer1.DisplayToolbar = true;//切换工具栏的显示
    crystalReportViewer1.DisplayGroupTree = false;//切换组树的显示
      

  4.   

    蓝屿我看不大懂你的帖子我想知道对于ReportDocument.DataDefinition.SortField[0].Field
    的FormulaName和m_FieldName如"Sum({table.column1,table.column2})",
    Field.kind为SummaryField,对于在代码中手工设置成如上的值,
    不知道要怎么做谢谢