如何在c#中加载外部Crystal Reports(2008)文件?

时间:2010-06-14 17:57:44

标签: asp.net crystal-reports

有人可以告诉我是否可以加载外部CrystalReports(2008).rpt文件? 我现在嵌入它们,所以它们是用我的核心编译的。

如果我可以更改报表布局而不必重新编译任何内容,那将是很好的。这可能吗?

感谢。

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。在以下示例中,可以上载.rpt文件,然后将其设置为标准ASP.NET CrystalReportViewer控件的源(在本例中为reportViewer)。

using CrystalDecisions.CrystalReports.Engine;

...

ReportDocument document = new ReportDocument();
document.Load(reportPath); //"C:\\path\\to\\report\\file.rpt";
reportViewer.ReportSource = document;
reportViewer.RefreshReport();

如果.rpt文件中嵌入的数据库凭据不正确,可以按如下方式设置:

using CrystalDecisions.Shared;

...

private void ViewReport()
{
 ConnectionInfo connInfo = new ConnectionInfo();
 connInfo.ServerName = "dbservername";
 connInfo.DatabaseName = "dbname";
 connInfo.UserID = "dbusername";
 connInfo.Password = "dbpassword";
 reportViewer.ReportSource = GetReportSource(connInfo);
 reportViewer.RefreshReport();
}

private ReportDocument GetReportSource(ConnectionInfo connInfo)
{
 ReportDocument document = new ReportDocument();
 document.Load(reportPath); //"C:\\path\\to\\report\\file.rpt";
 TableLogOnInfos logonInfos = new TableLogOnInfos();
 TableLogOnInfo logonInfo = new TableLogOnInfo();
 Tables tables;
 tables = document.Database.Tables;
 foreach(CrystalDecisions.CrystalReports.Engine.Table table in tables)
 {
  logonInfo = table.LogOnInfo;
  logonInfo.ConnectionInfo = connInfo;
  table.ApplyLogOnInfo(logonInfo);
 }
 return document;
}