Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对链接参数的操作非法。水晶报告_C#_Crystal Reports_Operation - Fatal编程技术网

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

C# 对链接参数的操作非法。水晶报告,c#,crystal-reports,operation,C#,Crystal Reports,Operation,我有一个问题,当生成一个报告,其中有子报告,它使用参数链接到主报告 如果没有链接参数,则没有问题 我在google上尝试过一些方法,比如直接从subreport设置参数值,所以通过IsLink()检查,但都失败了 你能给我一些建议吗 下面是C#visual studio 2010的参数设置代码 if (cmdOptions.Parameters != null) { List<string> valueLst = cmdOpti

我有一个问题,当生成一个报告,其中有子报告,它使用参数链接到主报告

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

我在google上尝试过一些方法,比如直接从subreport设置参数值,所以通过IsLink()检查,但都失败了

你能给我一些建议吗

下面是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);
if(cmdOptions.Parameters!=null)
{
List valueLst=cmdOptions.Parameters.GetStringList(“参数”);
字符串[]值=valueLst.ToArray();
log.info(“参数长度:+值.Length”);
int pCount=m_Report.ParameterFields.Count;
log.info(“参数字段的长度:+pCount”);
int-iMaxIdx=pCount-1;
for(int i=0;iiMaxIdx)
打破
ParameterField parField=m_Report.ParameterFields[i];
parField.CurrentValues.Clear();
开关(parField.ParameterValueType)
{
案例参数ValueKind.NumberParameter:
{
parField.CurrentValues.AddValue(Convert.ToDouble(values[i]);break;
}
案例参数ValueKind.Boolean参数:
{
parField.CurrentValues.AddValue(Convert.ToBoolean(values[i]));break;
}
案例参数ValueKind.DateParameter:
{
parField.CurrentValues.AddValue(Convert.ToDateTime(值[i]));break;
}
案例参数ValueKind.DateTimeParameter:
{
parField.CurrentValues.AddValue(Convert.ToDateTime(值[i]));break;
}
案例参数ValueKind.StringParameter:
{
parField.CurrentValues.AddValue(Convert.ToString(values[i]);
//AddDiscreetValue(Convert.ToString(values[i]),parField.CurrentValues);
打破
}
违约:
{
parField.CurrentValues.AddValue(Convert.ToString(values[i]));break;
}
}
}
}
ExportOptions o=BuildExportOptions(cmdOptions)//没问题,我已经测试过了。
m_报告。出口(o);
下面是错误

“对链接参数的操作非法。 2014-02-25 14:00:13039[1]错误程序[(null)]-CrystalDecisions.ReportAppServer.DataSetConversion 2014-02-25 14:00:13039[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) 位于CrystalDecisions.CrystalReports.Engine.ReportDocument.Export(导出选项) 在“中的ReportGenerator.GeneratorEngine.Export(CommandOptions cmdOptions)”处


在Crystal Reports 2013下(至少)属性
参数字段
是只读的:

ParameterFields ParameterFields { get; }
这样,无论您使用
ParameterFields
属性更改值,您都不会更改报告中的值,那么在运行时将不会设置参数。 使用

ReportDocument
class下

使用代码的示例:

public object ParameterParse(ParameterValueKind type, string value)
{
    if (String.IsNullOrEmpty(value))
        return null;

    switch (type)
    {
        case ParameterValueKind.NumberParameter:
            return Convert.ToInt32(value);
        case ParameterValueKind.CurrencyParameter:
            return Convert.ToDecimal(value);
        case ParameterValueKind.BooleanParameter:
            return Convert.ToBoolean(value);
        case ParameterValueKind.DateParameter:
        case ParameterValueKind.DateTimeParameter:
            return Convert.ToDateTime(value);
        case ParameterValueKind.StringParameter:
            return Convert.ToString(value);
        case ParameterValueKind.TimeParameter:
            TimeSpan time;
            return TimeSpan.TryParse(value, out time) ? time : (object)null;
    }
    return null;
}
...

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;

    if (pCount > values.Length)
    {
        throw new Exception("Parameters count in report is greatest than parameters supplied"); 
    }

    for (int i = 0; i < pCount; i++)
    {
        m_Report.SetParameterValue(i, ParameterParse(m_Report.ParameterFields[i].ParameterValueType, values[i]) 
    }
}
public object ParameterParse(ParameterValueKind类型,字符串值)
{
if(String.IsNullOrEmpty(value))
返回null;
开关(类型)
{
案例参数ValueKind.NumberParameter:
返回Convert.ToInt32(值);
案例参数ValueKind.CurrencyParameter:
返回Convert.ToDecimal(值);
案例参数ValueKind.Boolean参数:
返回Convert.ToBoolean(值);
案例参数ValueKind.DateParameter:
案例参数ValueKind.DateTimeParameter:
返回Convert.ToDateTime(值);
案例参数ValueKind.StringParameter:
返回Convert.ToString(值);
案例参数ValueKind.TimeParameter:
时间跨度时间;
返回TimeSpan.TryParse(值,超时)?time:(对象)null;
}
返回null;
}
...
if(cmdOptions.Parameters!=null)
{
List valueLst=cmdOptions.Parameters.GetStringList(“参数”);
字符串[]值=valueLst.ToArray();
log.info(“参数长度:+值.Length”);
int pCount=m_Report.ParameterFields.Count;
log.info(“参数字段的长度:+pCount”);
int-iMaxIdx=pCount-1;
if(pCount>values.Length)
{
抛出新异常(“报告中的参数计数大于提供的参数”);
}
for(int i=0;i

在2013年水晶报告下(至少)属性
参数字段
是只读的:

ParameterFields ParameterFields { get; }
这样,无论您使用
ParameterFields
属性更改值,您都不会更改报告中的值,那么在运行时将不会设置参数。 使用

ReportDocument
class下

使用代码的示例:

public object ParameterParse(ParameterValueKind type, string value)
{
    if (String.IsNullOrEmpty(value))
        return null;

    switch (type)
    {
        case ParameterValueKind.NumberParameter:
            return Convert.ToInt32(value);
        case ParameterValueKind.CurrencyParameter:
            return Convert.ToDecimal(value);
        case ParameterValueKind.BooleanParameter:
            return Convert.ToBoolean(value);
        case ParameterValueKind.DateParameter:
        case ParameterValueKind.DateTimeParameter:
            return Convert.ToDateTime(value);
        case ParameterValueKind.StringParameter:
            return Convert.ToString(value);
        case ParameterValueKind.TimeParameter:
            TimeSpan time;
            return TimeSpan.TryParse(value, out time) ? time : (object)null;
    }
    return null;
}
...

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;

    if (pCount > values.Length)
    {
        throw new Exception("Parameters count in report is greatest than parameters supplied"); 
    }

    for (int i = 0; i < pCount; i++)
    {
        m_Report.SetParameterValue(i, ParameterParse(m_Report.ParameterFields[i].ParameterValueType, values[i]) 
    }
}
public object ParameterParse(ParameterValueKind类型,字符串值)
{
if(String.IsNullOrEmpty(value))
复述