在水晶报告中传递多个值

时间:2011-04-21 13:48:33

标签: c# crystal-reports parameters

我试图通过Crystal报表

传递从传递给MS SQL存储过程的C#生成的2个值

到目前为止我有这段代码

string username = Context.User.Identity.Name;
string date = DateTime.Now.ToShortDateString() ;
ReportDocument crystalReport = new ReportDocument();

crystalReport.Load(Server.MapPath(@"..\admin\CrystalReport1.rpt"));
crystalReport.SetParameterValue("@Username", username);
crystalReport.SetParameterValue("@Date", date);

crystalReport.SetDatabaseLogon("", "", @"dennislaptop-pc\SQLEXPRESS", "healthylifestyledb");
CrystalReportViewer1.ReportSource = crystalReport;

上面的代码是在水晶报表生成页面中,当我尝试将@Date值传递给存储过程时,问题就出现了。存储过程运行良好,但我在C#

中收到此错误

索引无效。 (来自HRESULT的异常:0x8002000B(DISP_E_BADINDEX))

我可以传递2个参数值的任何帮助吗?

2 个答案:

答案 0 :(得分:0)

我使用了不同的方法。如果您创建CrystalReport,C#将为该报告生成一个类(和.cs)文件。

然后,您可以通过ReportClass report = new CrystalReport1();

创建报告

然后你可以添加参数:

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;

ReportClass report = new CrystalReport1();
report.SetParameterValue("companies", "Microsoft");
//or use the overloaded value for an array as 2nd parameter

但您需要通过C#创建报告(或者可能已添加到C#中),以便为报告创建类。

答案 1 :(得分:0)

参数是否来自同一个“来源”?出于某种原因,如果您尝试写入Crystal传递给存储过程的参数,则需要名称前面的@,而如果它是您手动添加到报表中的参数,则@不需要。如果'@Date'不起作为名称,请尝试'日期'。