在C#中将参数传递给水晶报表的步骤

你能告诉我在C#winforms中将参数传递给crystal Reports 13的步骤是什么?

我的代码:

//getting and set dataset to report string sql = "select * from dbo.Trading_Order"; DataRetriever dr = new DataRetriever(); dr.getValueFromCustomer(sql); DataTable dtSum = dr.getDataTable(); dsMyReprt k = new dsMyReprt(); k.Tables.Remove("dtMyTable"); dtSum.TableName = "dtMyTable"; k.Tables.Add(dtSum); CrystalReport1 myDataReport = new CrystalReport1(); //pass parameter ParameterFields paramFields = new ParameterFields(); // ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue(); ParameterField paramField = new ParameterField(); ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue(); paramField.Name = "@DTotal"; paramDiscreteValue.Value = tot; paramField.CurrentValues.Add(paramDiscreteValue); paramFields.Add(paramField); paramField = new ParameterField(); paramDiscreteValue = new ParameterDiscreteValue(); paramField.Name = "@name"; paramDiscreteValue.Value = name; paramField.CurrentValues.Add(paramDiscreteValue); paramFields.Add(paramField); crystalReportViewer1.ParameterFieldInfo = paramFields; myDataReport.SetDataSource(k); crystalReportViewer1.ReportSource = myDataReport; 

获取和设置数据集部分正在工作但传递参数部分不起作用

几周以来我一直很头疼…我必须确切地说我在Crystal Reports Designer中设置了一个sql查询。 因此,我没有像你那样使用dataTable,所以你必须考虑这一点。

那么,@ campagnolo_1建议你:

 ReportDocument myDataReport = new ReportDocument(); myDataReport.Load(@"C:\Reports\Report.rpt"); myDataReport.SetParameterValue("MyParameter1", "Hello1"); myDataReport.SetParameterValue("MyParameter2", "Hello2"); myDataReport.SetParameterValue("MyParameter3", "Hello3"); 

这是简短而甜蜜的解决方案。 但是,在此之后,您必须确保在Crystal Reports设计器中创建了类型为String的MyParameter1MyParameter2MyParameter3

  1. 重要的是要提到在使用SetParameterValue设置参数之前必须加载报告。

  2. 如果参数的名称是MyParameter1 ,那么不要像这样在前面添加@

    myDataReport.SetParameterValue(“@ MyParameter1”,“Hello1”); //你的程序会崩溃

  3. 如果你有The parameter is incorrect那么你应该确保你给出的参数值的类型与参数类型完全相同。 例如,如果您将参数StartDate作为Date类型,那么请确保您提供的值是Date类型并具有正确的日期格式。

此外,您还谈到了动态或静态领域。 在您的情况下,我认为您手动输入值,然后这是静态字段。

希望这对你有所帮助。

你现在可能已经找到了解决方案。 但这可能有所帮助。 输入作为参数传递的值。

http://www.codeproject.com/Tips/753879/Automatically-Setting-a-Parameter-from-a-Csharp-Va

为什么不这样试试并节省一些编码?

 ReportDocument myDataReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument(); myDataReport.Load(@"C:\Reports\Report.rpt"); myDataReport.SetParameterValue("MyParameter1", "Hello1"); myDataReport.SetParameterValue("MyParameter2", "Hello2"); myDataReport.SetParameterValue("MyParameter3", "Hello3");