Crystal Report DataBase登录失败转到下一页时出错

时间:2015-05-07 12:31:36

标签: c# asp.net crystal-reports

我有一个带有Crystal Report Viewer Control的Asp.net表单。

在Page_Load事件中,我正在加载报告&从数据库设置数据源。

id

这是相关的html

compareable

我设置了 EnableDatabaseLogonPrompt =“false”,因为我提供了自己的数据源&登录问题不会出现。

当我的数据加载页面时,我会看到报告。 但是,当我选择“转到下一页”水晶报表查看器控件的链接时,会弹出错误

错误:“数据库登录失败。”

似乎我错过了一些东西(可能重新绑定数据集/报告),但无法弄明白......

我可以通过注释掉Line if(!IsPostBack)来解决这个错误。 但这是再次查询数据库的正确方法吗?每次用户更改页面时加载整个报告?

或者是否有更简单/更容易的选择..

2 个答案:

答案 0 :(得分:0)

加载报告的代码必须在每次回发时执行。 Page_Init是您可以放置​​此代码的正确位置(Page_Load可能会导致一些错误)。


嘿,建议在每个页面卸载时关闭ReportDocument;这样可以避免在报告计数器上无法控制地增加停止应用程序

 protected void Page_Unload(object sender, EventArgs e)
   {
      if (reportDocument != null)
      reportDocument.Close();
   }

答案 1 :(得分:0)

将代码放在LoadData方法中,该方法应调用if(!IsPostBack)。 IsPostBack用于Ajax调用,而CrystalReports则不然。

我是这样做的:

<CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
        <Report FileName="myCristalReport.rpt"></Report>
</CR:CrystalReportSource>

<CR:CrystalReportViewer 
                        ID="CrystalReportViewer1" 
                        runat="server" 
                        AutoDataBind="true"
                        EnableDatabaseLogonPrompt="False" 
                        EnableParameterPrompt="False" 
                        ReportSourceID="CrystalReportSource1" 
                        ToolPanelView="None" />

并在LoadData中:

 var reportSource = (CrystalReportSource)this.FindControlRecursively("CrystalReportSource1");
     reportSource.ReportDocument.SetDatabaseLogon("dbuser", "dbpassword");
     reportSource.ReportDocument.SetParameterValue("Month", 2);

...