C# 从C运行Crystal Reports 2011报表时处理可选参数#

C# 从C运行Crystal Reports 2011报表时处理可选参数#,c#,crystal-reports-2010,C#,Crystal Reports 2010,我正在用VS2010编写一个C#自定义调度工具,以执行和导出许多Crystal Reports 2011 rpt文件。目前,这些报告是在CR Developer中手动执行的,有些报告具有可选参数,在运行时可以保留为空,这些参数通过报告中记录选择公式中的CR“HasValue()”函数进行处理 我已经开发了一个原型应用程序来执行和导出其中一个报告,并且可以毫无问题地传入参数值: // Set up the Parameter/s Parameter

我正在用VS2010编写一个C#自定义调度工具,以执行和导出许多Crystal Reports 2011 rpt文件。目前,这些报告是在CR Developer中手动执行的,有些报告具有可选参数,在运行时可以保留为空,这些参数通过报告中记录选择公式中的CR“HasValue()”函数进行处理

我已经开发了一个原型应用程序来执行和导出其中一个报告,并且可以毫无问题地传入参数值:

                // Set up the Parameter/s

        ParameterFieldDefinitions crParameterFieldDefinitions;
        ParameterFieldDefinition crParameterFieldDefinition;
        ParameterValues crParameterValues = new ParameterValues();
        ParameterDiscreteValue crUserProfileValue = new ParameterDiscreteValue();

        crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
        crParameterFieldDefinition = crParameterFieldDefinitions["UserProfile"];
        crParameterValues = crParameterFieldDefinition.CurrentValues;

        crParameterValues.Clear();
        crUserProfileValue.Value = "SIPRECLK";
        crParameterValues.Add(crUserProfileValue);
        crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);
这将在报告PDF和XLS导出中提供所需的结果

但是,这个UserProfile参数在报告中被标记为可选的,我无法确定如何将其设置为空值,以模拟用户在使用CR Developer手动执行报告时将该参数字段留空

我已尝试设置crUserProfileValue.Value=“”,以及字符串.Empty,但这两个参数都被视为实际参数值,并且在记录选择公式中使用时,无法匹配数据源中的任何记录,并导致空报告

如果我设置了crUserProfileValue.Value=null,则会在以下位置引发异常:

    crParametersFieldDefinition.ApplyCurrentValues(crParameterValues);
声明“参数字段和参数字段当前值的类型不兼容。”

我还尝试过不将crUserProfileValue添加到crParameterValues集合中,但在执行报告时遇到“缺少参数值”异常


如何以编程方式将报表中定义为可选的参数的值设置为一个值,该值将导致CR HasValue()函数在记录选择公式中返回FALSE?

好的,因此我最终通过SAP社区网络找到了将可选参数设置为“非值”的确切方法以编程方式

我不需要使用报告的DataDefinition.ParameterFields路由(如上所述),而只需要编写:

    cryRpt.ParameterFields["UserProfile"].CurrentValues.IsNoValue = true;
工作正常,触发记录选择公式中所需的代码路径