当我点击子报告收到的异常时:“尚未创建通信通道”

时间:2009-10-05 14:12:51

标签: .net crystal-reports

我有一个报告,此报告包含多个子报告,有时会在加载“无法加载报告”时抛出错误,但仍会加载报告。 (不是我当前的问题,就像一些额外的信息一样)

我点击了一个子报告,并抛出了一个异常“尚未创建通信通道。”

Stacktrace是:

  

CrystalDecisions.ReportAppServer.Controllers.DatabaseControllerClass.ReplaceConnection(对象   oldConnection,Object newConnection,   Object parameterFields,Object   crDBOptionUseDefault)at   CrystalDecisions.CrystalReports.Engine.Table.ApplyLogOnInfo(TableLogOnInfo   logonInfo)

这是在我的dev机器上运行本地SQL Server,否则一切正常。

1 个答案:

答案 0 :(得分:0)

如果你已经使用了全局报表文档对象并使用相同的报表文档对象加载报表并设置主报表的数据源以及帖子上的子报表比水晶报表生成“尚未创建通信通道”错误,我是面对相同的场景,并花了很多时间来解决这个问题,最后我想出了以下的灵魂......

每当你加载你的报告并设置数据源时,创建新的报告文档对象,当你第一次加载报告时创建一个新的报告文档对象,当你回发页面时,也会生成一个新的报告文档对象。这解决了我的错误希望它对你也有用,,,,

让我用小实例解释

案例1: - 通讯渠道错误

public partial class User_Reports : System.Web.UI.Page
{

    ReportDocument rptDoc = new ReportDocument();

    protected void Page_Load(object sender, EventArgs e)
    {
      loadReport();
    }

    private void loadReport()
    {
      rptDoc.Load("x.rpt");
      rptDoc.SetDataSource(datatable);

      rptDoc.Subreports["subreportX.rpt"].SetDataSource    (datatable1);

    }
}

- 这是第一次运行正常,但当我回复并重新加载报告时,它给了我沟通渠道错误...

案例2 - 回发后没有通讯渠道错误

public partial class User_Reports : System.Web.UI.Page
{

  protected void Page_Load(object sender, EventArgs e)
  {
    loadReport();
  }   

  private void loadReport()
  {
    ReportDocument rptDoc = new ReportDocument();
    rptDoc.Load("x.rpt");
    rptDoc.SetDataSource(datatable);
    rptDoc.Subreports["subreportX.rpt"].SetDataSource     (datatable1);

   }

}

这对我来说很好。希望它适用于所有人。

此致

马赫什