对链接参数的操作非法。水晶报告

0 c# operation crystal-reports

我在生成包含子报告的报告时遇到问题,并且它使用指向主报告的参数链接。

如果没有链接参数,则没有问题。

我尝试了谷歌的一些方法,例如直接从子报表设置参数值,因此通过 islinked() 检查,但全部失败。

您能否就此提出建议。

下面是C# Visual Studio 2010的参数设置代码

        if (cmdOptions.Parameters != null)
        {
            List<string> valueLst = cmdOptions.Parameters.GetStringList("parameters");

            string[] values = valueLst.ToArray();
            log.info("Lenth of parameters: " + values.Length);
            int pCount = m_Report.ParameterFields.Count;
            log.info("Lenth of parameters field: " + pCount);
            int iMaxIdx = pCount - 1;
            for (int i = 0; i < values.Length; i++)
            {
                if (i > iMaxIdx)
                    break;
                ParameterField parField = m_Report.ParameterFields[i];

                parField.CurrentValues.Clear();
                switch (parField.ParameterValueType)
                {
                    case ParameterValueKind.NumberParameter:
                        {
                            parField.CurrentValues.AddValue(Convert.ToDouble(values[i])); break;
                        }
                    case ParameterValueKind.BooleanParameter:
                        {
                            parField.CurrentValues.AddValue(Convert.ToBoolean(values[i])); break;
                        }
                    case ParameterValueKind.DateParameter:
                        {
                            parField.CurrentValues.AddValue(Convert.ToDateTime(values[i])); break;
                        }
                    case ParameterValueKind.DateTimeParameter:
                        {
                            parField.CurrentValues.AddValue(Convert.ToDateTime(values[i])); break;
                        }
                    case ParameterValueKind.StringParameter:
                        {
                            parField.CurrentValues.AddValue(Convert.ToString(values[i])); 
                            //AddDiscreetValue(Convert.ToString(values[i]), parField.CurrentValues);
                            break;
                        }
                    default:
                        {
                            parField.CurrentValues.AddValue(Convert.ToString(values[i])); break;
                        }
                }
            }
        }

ExportOptions o = BuildExportOptions(cmdOptions);//there is no problem, I have tested for this.
        m_Report.Export(o);
Run Code Online (Sandbox Code Playgroud)

下面是错误

“链接参数上的操作非法。2014-02-25 14:00:13,039 [1] 错误程序 [(null)] - CrystalDecisions.ReportAppServer.DataSetConversion 2014-02-25 14:00:13,039 [1] 错误程序 [( null)] - 在 CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(异常 e) 在 CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) 在 CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext) 在 CrystalDecisions.CrystalReports.Engine.FormatEngine .Export(ExportRequestContext reqContext) at CrystalDecisions.CrystalReports.Engine.ReportDocument.Export(ExportOptions options) at ReportGenerator.GeneratorEngine.Export(CommandOptions cmdOptions) in "

小智 5

当我遇到这个问题时,是因为后来我意识到 ParameterFields 可枚举还包括用于链接报告的子报告参数。

由于我只在子报告中使用参数来创建父报告之间的关联,因此我的解决方案是检查参数对象的 ReportName 属性,忽略具有 ReportName 值的所有参数。

使用上面代码中的片段:

for (int i = 0; i < values.Length; i++)
{
    if (i > iMaxIdx)
        break;

    ParameterField parField = m_Report.ParameterFields[i];

    //is this a sub-report parameter?
    if(parField.ReportName.Length > 0)  
        continue;  //yes, move next

    parField.CurrentValues.Clear();

    //additional processing here
}
Run Code Online (Sandbox Code Playgroud)