使用DataDynamics.ActiveReports開發報表是一種不錯的選擇。今天由於項目需要在一個已有的報表上添加另外一個報表的內容,於是就想到了使用它的子報表功能。這樣就可以實現項目需求。
首先查看了DataDynamics.ActiveReports自帶的SubReport的示例項目。它是將子報表放在原報表的明細中,其實我試過也可以把子報表放在報表頭或報表尾。關鍵是在定義子報表是要將子報表的報表頭和報表尾刪除掉換成分組。我想這是因為在同一個報表中只能定義一個報表頭和報表尾的緣故,如果子報表也這樣定義也許會有沖突。
下面就把制作子報表的簡要步驟列舉如下:
首先制作一個報表,並使其能夠正常預覽。然後在設計視圖的工具箱中拖放一個Subreport的控件到報表上,可以放在報表的任何部分。然後重命名這個子報表。
接下來,在這個報表的相關部分的Format事件中添加初始化子報表的代碼。例如:這時子報表放在報表頭那麼就應該在報表頭的Format事件中添加代碼,如下所示。
using DataDynamics.ActiveReports;
using DataDynamics.ActiveReports.Document;
using DataDynamics.ActiveReports.DataSources;
// 父報表
public class MyActiveReport : ActiveReport
{
//創建一個需要在子報表中顯示的已有報表類的實例
rptSubReport _SubReport = null;
// 其他代碼省略
private void PageHeader_Format(object sender, System.EventArgs eArgs)
{
if (_SubReport == null)
{
SqlDBDataSource subDs = new SqlDBDataSource(); // 聲明ActiveReports數據源
subDs.ConnectionString = cnnString; // 給這個數據源指定連接字符串
subDs.SQL = "select * from table1 "; // 指定查詢語句
_SubReport = new rptSubReport(); // 實例化預定義報表實例
this.SubReport.Report = _SubReport; // 給子報表指定預定義報表實例
this.SubReport.Report.DataSource = subDs; // 給子報表指定ActiveReports數據源
}
}
}
最好在父報表中加上“using DataDynamics.ActiveReports.DataSources;” 這樣就可以直接使用DataDynamics.ActiveReports.DataSources的數據源類。ActiveReports的數據源支持SQL 和OLEDB可以根據需要選擇。