【问题标题】:passing parameters in crystal report在水晶报表中传递参数
【发布时间】:2009-06-17 13:03:09
【问题描述】:

我正在从存储过程创建水晶报告,当我传递一个参数时效果很好,但它显示错误

“参数不正确”

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

 {
    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");

}

请告诉我任何更改

【问题讨论】:

  • 仅供参考,元音在这里是免费的。

标签: c# crystal-reports


【解决方案1】:

您需要为这两个参数创建新的 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");

}

编辑: 评论中提到的错误可能是因为代码中有两个变量paramField或paramDiscreteValue的定义。在一种 c# 方法中,您不能多次定义具有相同名称的变量。 尝试上面写的代码,如果仍然出现编译器错误,请在此处粘贴完整的错误文本。

【讨论】:

  • 不,它不工作,paramField paramDiscreteValue 已定义错误
  • 是的。 ParameterDiscreteValue 有两种定义。我会评论额外的行。
  • 这不是和以前一样的错误吗?在哪一行?请发布完整的错误文本。这是编译器错误还是运行时错误?
  • 这不是编译时错误报告正在生成,但报告中写有“正确的参数”
  • 那么你应该检查代码中的参数名称(@Dept 和@Name)是否与水晶报表中的参数名称相同。还要检查类型 - 代码中的两个参数都是字符串,请参阅该报告还需要字符串值。
【解决方案2】:

试试这个更简洁一点

{    
  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");
}

【讨论】:

    【解决方案3】:

    确保参数中传递的实际数据没有被隐式转换为错误的数据类型。就像您为 @Dept 参数传递数字 ID 一样,请确保预期接收该值的输入参数的数据类型也是数字类型。

    【讨论】:

      【解决方案4】:

      尝试在您添加到报告中的每个参数之前创建 ParameterField:

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

      【讨论】:

      • 不,它不工作,paramField 和 paramDiscreteValue 已经定义错误
      【解决方案5】:

      可以使用 Crystal Reports for Visual Studio 2005 复制此问题。解决方法是先设置 CrystalReportViewer 的 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");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多