Crystal报告参数不正确C#

时间:2012-11-02 17:26:34

标签: c# crystal-reports crystal-reports-xi

我的报告有两个参数:ponumber和receiptno。我正在尝试从C#页面调用报告,其中参数值通过URL传入。当我调用报告时,出现错误“参数不正确”,但无法找出原因。我根据我在网上找到的内容做了各种代码更改,因为起初报表查看器说没有参数,所以这种方法似乎更好,但不起作用。 / p>

我的代码:

string ponumber =  Request.QueryString["ponumber"].ToString();
string receiptno = Request.QueryString["receiptno"].ToString();

    // Put Away Report


    CrystalReportSource CrystalReportSource1 = new CrystalReportSource();
    CrystalReportViewer CrystalReportViewer1 = new CrystalReportViewer();



    ParameterFields paramFields1 = new ParameterFields();
    ParameterFields paramFields2 = new ParameterFields();
    ParameterField paramField1 = new ParameterField();
    ParameterField paramField2 = new ParameterField();
    ParameterDiscreteValue paramDiscreteValue1 = new ParameterDiscreteValue();
    ParameterDiscreteValue paramDiscreteValue2 = new ParameterDiscreteValue();

    paramField1.Name = "@ponumber";
    paramDiscreteValue1.Value = ponumber;
    paramField1.CurrentValues.Add(paramDiscreteValue1);
    paramField1.HasCurrentValue = true;
    paramFields1.Add(paramField1);

    paramField2.Name = "@receiptno";
    paramDiscreteValue2 = new ParameterDiscreteValue();  // <-- This line is added
    paramDiscreteValue2.Value = receiptno;
    paramField2.CurrentValues.Add(paramDiscreteValue2);
    paramField2.HasCurrentValue = true;
    paramFields2.Add(paramField2);

    CrystalReportViewer1.ParameterFieldInfo = paramFields1;
    CrystalReportViewer1.ParameterFieldInfo = paramFields2;

    TableLogOnInfo logOnInfo = new TableLogOnInfo();

    logOnInfo.ConnectionInfo.ServerName =   ConfigurationManager.AppSettings["WarehouseReportServerName"];
    logOnInfo.ConnectionInfo.DatabaseName = ConfigurationManager.AppSettings["WarehouseReportDatabaseName"];
    logOnInfo.ConnectionInfo.UserID = ConfigurationManager.AppSettings["WarehouseReportUserID"];
    logOnInfo.ConnectionInfo.Password = ConfigurationManager.AppSettings["WarehouseReportPassword"];

    TableLogOnInfos infos = new TableLogOnInfos();
    infos.Add(logOnInfo);
    CrystalReportViewer1.LogOnInfo = infos;

    maindiv.Controls.Add(CrystalReportSource1);
    maindiv.Controls.Add(CrystalReportViewer1);
    CrystalReportViewer1.ReportSource = CrystalReportSource1;
    CrystalReportViewer1.EnableParameterPrompt = false;
    CrystalReportSource1.Report.FileName = "Report3.rpt";
    CrystalReportSource1.EnableCaching = false;
    CrystalReportViewer1.DataBind();

2 个答案:

答案 0 :(得分:1)

我对Crystal Reports并不熟悉,但有些事情在我身上跳了出来,就在这里:

    CrystalReportViewer1.ParameterFieldInfo = paramFields1;
    CrystalReportViewer1.ParameterFieldInfo = paramFields2;

您正在覆盖第二行的ParameterFieldInfo集合,因此有效paramFields1永远不会被发送到报告。相反,我认为你想添加到集合中。我已经修改了你的代码来执行此操作(并删除了不必要的行):

    string ponumber = Request.QueryString["ponumber"].ToString();
    string receiptno = Request.QueryString["receiptno"].ToString();

    // Put Away Report

    CrystalReportSource CrystalReportSource1 = new CrystalReportSource();
    CrystalReportViewer CrystalReportViewer1 = new CrystalReportViewer();

    ParameterField paramField1 = new ParameterField();
    ParameterField paramField2 = new ParameterField();
    ParameterDiscreteValue paramDiscreteValue1 = new ParameterDiscreteValue();
    ParameterDiscreteValue paramDiscreteValue2 = new ParameterDiscreteValue();

    paramField1.Name = "@ponumber";
    paramDiscreteValue1.Value = ponumber;
    paramField1.CurrentValues.Add(paramDiscreteValue1);
    paramField1.HasCurrentValue = true;

    paramField2.Name = "@receiptno";
    paramDiscreteValue2.Value = receiptno;
    paramField2.CurrentValues.Add(paramDiscreteValue2);
    paramField2.HasCurrentValue = true;

    CrystalReportViewer1.ParameterFieldInfo.Add(paramField1);
    CrystalReportViewer1.ParameterFieldInfo.Add(paramField2);

    TableLogOnInfo logOnInfo = new TableLogOnInfo();

    logOnInfo.ConnectionInfo.ServerName = ConfigurationManager.AppSettings["WarehouseReportServerName"];
    logOnInfo.ConnectionInfo.DatabaseName = ConfigurationManager.AppSettings["WarehouseReportDatabaseName"];
    logOnInfo.ConnectionInfo.UserID = ConfigurationManager.AppSettings["WarehouseReportUserID"];
    logOnInfo.ConnectionInfo.Password = ConfigurationManager.AppSettings["WarehouseReportPassword"];

    TableLogOnInfos infos = new TableLogOnInfos();
    infos.Add(logOnInfo);
    CrystalReportViewer1.LogOnInfo = infos;

    maindiv.Controls.Add(CrystalReportSource1);
    maindiv.Controls.Add(CrystalReportViewer1);
    CrystalReportViewer1.ReportSource = CrystalReportSource1;
    CrystalReportViewer1.EnableParameterPrompt = false;
    CrystalReportSource1.Report.FileName = "Report3.rpt";
    CrystalReportSource1.EnableCaching = false;
    CrystalReportViewer1.DataBind();

答案 1 :(得分:0)

我找到了另一个让我超越驼峰的答案。我用以下代码替换了13行代码:

CrystalReportSource1.ReportDocument.SetParameterValue(0, ponumber);
CrystalReportSource1.ReportDocument.SetParameterValue(1, receiptno);

Passing Values to a Crystal Report

不是手动构建集合,而是看起来源具有与设置参数值不同的方法。我怀疑我的第一次尝试是动态创建参数。