Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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# 在crystal报表中传递参数_C#_Crystal Reports - Fatal编程技术网

C# 在crystal报表中传递参数

C# 在crystal报表中传递参数,c#,crystal-reports,C#,Crystal Reports,我正在从存储过程创建crytal report,当我传递一个参数时,它可以正常工作,但它显示了一个错误 “参数不正确” 当我传递两个参数时 我的代码是 { ReportDocument reportDocument = new ReportDocument(); ParameterField paramField = new ParameterField(); ParameterFields paramFields = new ParameterFields();

我正在从存储过程创建crytal report,当我传递一个参数时,它可以正常工作,但它显示了一个错误

“参数不正确”

当我传递两个参数时 我的代码是

 {
    ReportDocument reportDocument = new ReportDocument();
    ParameterField paramField = new ParameterField();
    ParameterFields paramFields = new ParameterFields();
    ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();

    paramField.Name = "@Dept";
    paramDiscreteValue.Value = TextBox1.Text.ToString();
    paramField.CurrentValues.Add(paramDiscreteValue);
    paramFields.Add(paramField);

    paramField.Name = "@Name";
    paramDiscreteValue.Value = TextBox2.Text.ToString();
    paramField.CurrentValues.Add(paramDiscreteValue);
    paramFields.Add(paramField);

    CrystalReportViewer1.ParameterFieldInfo = paramFields;
    reportDocument.Load(Server.MapPath("CrystalReport.rpt"));
    CrystalReportViewer1.ReportSource = reportDocument;
    reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test");

}

请让我知道任何更改

确保在参数中传递的实际数据未隐式转换为错误的数据类型。与为@Dept参数传递数字ID类似,请确保预期接收值的输入参数的数据类型也是数字类型。

您需要为这两个参数创建新的parameterField和value。您当前的代码添加参数,修改它(更改名称和值)并再次添加相同的对象。这应该是正确的:

 {
ReportDocument reportDocument = new ReportDocument();

ParameterFields paramFields = new ParameterFields();
// ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();

ParameterField paramField = new ParameterField();
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
paramField.Name = "@Dept";
paramDiscreteValue.Value = TextBox1.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);

paramField = new ParameterField(); // <-- This line is added
paramDiscreteValue = new ParameterDiscreteValue();  // <-- This line is added
paramField.Name = "@Name";
paramDiscreteValue.Value = TextBox2.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);

CrystalReportViewer1.ParameterFieldInfo = paramFields;
reportDocument.Load(Server.MapPath("CrystalReport.rpt"));
CrystalReportViewer1.ReportSource = reportDocument;
reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test");
{
ReportDocument ReportDocument=新的ReportDocument();
ParameterFields paramFields=新的ParameterFields();
//ParameterDiscreteValue paramDiscreteValue=新的ParameterDiscreteValue();
ParameterField paramField=新的ParameterField();
ParameterDiscreteValue paramDiscreteValue=新的ParameterDiscreteValue();
paramField.Name=“@Dept”;
paramDiscreteValue.Value=TextBox1.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);

paramField=new ParameterField();//尝试在添加到报告中的每个参数之前创建ParameterField:

paramField = new ParameterField();
paramDiscreteValue.Value = ...
...

试试这个,它更简洁一点

{    
  ReportDocument reportDocument = new ReportDocument();

  reportDocument.Load(Server.MapPath("CrystalReport.rpt"));
  CrystalReportViewer1.ReportSource = reportDocument;
  reportDocument.SetParameterValue("@Dept", TextBox1.Text.ToString());    
  reportDocument.SetParameterValue("@Name", TextBox2.Text.ToString());

 // CrystalReportViewer1.ParameterFieldInfo = paramFields;

  reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test");
}

Crystal Reports for Visual Studio 2005可以复制此问题。解决方法是先设置Crystal ReportViewer的ReportSource属性,然后设置参数值。因此,您的代码应为:

{
ReportDocument reportDocument = new ReportDocument();

CrystalReportViewer1.ReportSource = reportDocument;

ParameterField paramField = new ParameterField();
ParameterFields paramFields = new ParameterFields();
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();

paramField.Name = "@Dept";
paramDiscreteValue.Value = TextBox1.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);

paramField.Name = "@Name";
paramDiscreteValue.Value = TextBox2.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);

CrystalReportViewer1.ParameterFieldInfo = paramFields;
reportDocument.Load(Server.MapPath("CrystalReport.rpt"));
reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test");
}

仅供参考,元音在这里是免费的。不,它不起作用。错误是paramField paramDiscreteValue已经定义了Yup。ParameterDiscreteValue有两个定义。我将额外注释一行。这与以前的错误不同?在哪一行?请发布完整的错误文本。这是编译器错误还是运行时错误?这不是complile time错误报告正在生成,但报告中写有“在正确的参数中”,然后您应该检查代码中的参数名称(@Dept和@Name)与Crystal报表中的参数名称相同。另请检查类型-代码中的两个参数都是字符串,请参阅该报表也需要字符串值。否不起作用。已定义paramField和paramDiscreteValue时出错