我无法将值传递给报告。
这是我的代码:
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))
答案 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”文件夹中。
撰写本文时,修改报告文件中有关参数的内容,然后将其复制到编译位置。