我的报告有两个参数: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();
答案 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
不是手动构建集合,而是看起来源具有与设置参数值不同的方法。我怀疑我的第一次尝试是动态创建参数。