2012-08-10 68 views
0

我使用的WPF水晶报表查看器,我很满意它。水晶报表子报表没有链接到我的主要报告

但是,我有一个Subreports的问题。

我在链接的子报表第一次尝试做这样的事情:

ReportDocument.Load(Response.ReportsPath + "\\myReport.rpt"); 
ConnectionInfo.DatabaseName = "myDatabase.mdb"; 
SetDBLogonForReport(ConnectionInfo, ReportDocument); 
ReportDocument.Database.Tables[0].Location = "Table0"; 
ReportDocument.Database.Tables[1].Location = "Table1"; 
foreach (var document in ReportDocument.Subreports.OfType<ReportDocument>()) 
{ 
    SetDBLogonForReport(ConnectionInfo, document); 
    document.Database.Tables[0].Location = "CommonSubreportTable"; 
} 

不幸的是,这是行不通的。

我试过了很多不同的解决方案。一位博客建议你必须在主报告之前设置子报表。

所以,我想这一点:

ReportDocument.Load(Response.ReportsPath + "\\myReport.rpt"); 
foreach (var document in ReportDocument.Subreports.OfType<ReportDocument>()) 
{ 
    SetDBLogonForReport(ConnectionInfo, document); 
    document.Database.Tables[0].Location = "CommonSubreportTable"; 
} 

ConnectionInfo.DatabaseName = "myDatabase.mdb"; 
SetDBLogonForReport(ConnectionInfo, ReportDocument); 
ReportDocument.Database.Tables[0].Location = "Table0"; 
ReportDocument.Database.Tables[1].Location = "Table1"; 

仍然没有奏效。另一位博主建议DataSets是要走的路。

所以,我做到了。

ConnectionInfo.DatabaseName = "MyDatabase.mdb"; 

foreach (ReportDocument document in ReportDocument.Subreports) 
{ 
    document.SetDataSource(response.Dst); 
} 
ReportDocument.Database.Tables[0].SetDataSource(response.Dsx.Tables[0]); 
ReportDocument.Database.Tables[1].SetDataSource(response.Dsc.Tables[0]); 

我仍然被提示输入参数值!我一直在这个小时!这不应该是这样的硬!任何人有任何其他的想法?是否有修补程序或我忽略的某些内容?

回答

0

所以我想出答案...

显然我必须设置基于表的名称,而不是索引的表位置。

ConnectionInfo.DatabaseName = "myDatabase.mdb"; 
SetDBLogonForReport(ConnectionInfo, ReportDocument); 
ReportDocument.Database.Tables[0].Location = "Table0"; 
ReportDocument.Database.Tables[1].Location = "Table1"; 

本来应该...

ConnectionInfo.DatabaseName = "myDatabase.mdb"; 
SetDBLogonForReport(ConnectionInfo, ReportDocument); 
ReportDocument.Database.Tables["Table0"].Location = "Table0"; 
ReportDocument.Database.Tables["Table1"].Location = "Table1"; 

一旦我这样做,一切运行正常。