Crystal Report:索引无效。 (HRESULT异常:0x8002000B(DISP_E_BADINDEX))

时间:2016-03-08 08:46:16

标签: asp.net-mvc database crystal-reports

我无法将值传递给报告。

这是我的代码:

public void GLRPT()
        {
            try
            {

                ReportClass rptH = new ReportClass();
                rptH.FileName = Server.MapPath("~/Rpts/G1.rpt");
                rptH.Load();

                string df = Session["fromdate"].ToString();
                string dt = Session["todate"].ToString();
                DateTime fromdate = DateTime.Parse(df);
                DateTime todate = DateTime.Parse(dt);

                rptH.SetParameterValue("?Date_From", fromdate);
                rptH.SetParameterValue("?Date_To", todate);
                rptH.ExportToHttpResponse(ExportFormatType.PortableDocFormat, System.Web.HttpContext.Current.Response, false, "GL");
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

我不知道为什么会看到此错误:
索引无效。 (HRESULT异常:0x8002000B(DISP_E_BADINDEX))

2 个答案:

答案 0 :(得分:1)

我们应该像这样传递参数值:

rptH.SetParameterValue("Date_From", fromdate); //correct

不会

rptH.SetParameterValue("?Date_From", fromdate); //incorrect

然后我们必须为报告提供数据库访问,因为如果不登录数据库,则不会打开报告。 这是代码:

ReportDocument rptH = new ReportDocument();
TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
ConnectionInfo crConnectionInfo = new ConnectionInfo();
Tables CrTables;

rptH.Load(Server.MapPath("~/Rpts/G1.rpt"));

string df = Session["fromdate"].ToString();
string dt = Session["todate"].ToString();
DateTime fromdate = DateTime.Parse(df);
DateTime todate = DateTime.Parse(dt);

rptH.SetParameterValue("Date_From", fromdate);
rptH.SetParameterValue("Date_To", todate);

crConnectionInfo.ServerName = "YOUR SERVER NAME";
crConnectionInfo.DatabaseName = "YOUR DATABASE NAME";
crConnectionInfo.UserID = "YOUR DATABASE USERNAME";
crConnectionInfo.Password = "YOUR DATABASE PASSWORD";

CrTables = rptH.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
{
    crtableLogoninfo = CrTable.LogOnInfo;
    crtableLogoninfo.ConnectionInfo = crConnectionInfo;
    CrTable.ApplyLogOnInfo(crtableLogoninfo);
}

rptH.ExportToHttpResponse(ExportFormatType.PortableDocFormat, System.Web.HttpContext.Current.Response, false, "GL");
  

我们必须在没有任何其他字符的情况下调用参数的名称,例如    @ ,只是参数的名称本身。

答案 1 :(得分:0)

我知道这个话题有点老了,但是如果我分享自己的经验,可能会对某人有所帮助。

正如我们在许多主题中可以读到的那样,“参数名称在报告文件和代码中是不同的”。是的,这是正确的,但是如果您在报表文件中添加或删除了参数,却忘记了将新文件复制到您的应用程序位置,也会发生这种情况。 我想这将是Visual Studio的工作,但有时VS忘记将修改后的报告文件复制到“ Debug”文件夹中。

撰写本文时,修改报告文件中有关参数的内容,然后将其复制到编译位置。