【问题标题】:Pass multiple values in crystal report在水晶报表中传递多个值
【发布时间】:2011-04-21 13:48:33
【问题描述】:

我正在尝试将 C# 生成的 2 个值通过 Crystal 报表传递给 MS SQL 存储过程

到目前为止我有这个代码

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 个参数值?

【问题讨论】:

    标签: c# crystal-reports parameters


    【解决方案1】:

    我使用了不同的方法。如果您创建 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# 就足够了)才能为报告创建类。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 数据将被传递到存储过程中,因此需要@符号
      • 如果使用索引而不是名称,即“.SetParameterValue(1, value)”是否有效?任何涉及参数的子报表?
      猜你喜欢
      • 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
      相关资源
      最近更新 更多