在上講中《ActiveReports 9實戰教程(1): 手把手搭建環境Visual Studio 2013 社區版》,咱們已經結合Visual Studio 2013搭建好了ActiveReports 9的開發環境,並完成了一個Hello World的RDL報表。 在本文,咱們經過配置數據源進行報表實戰,作過報表開發的報表達人知道,報表中的數據源分設計時數據源和運行時數據源。 如何理解呢?html
這2類數據源,表結構是同樣的,用途不同:程序員
1 設計時數據源,用於研發內部、報表小組進行配置、測試報表用。數據庫
2 運行時數據源,用於系統割接後在局方現場運行報表系統,如修改連接數據庫的字符串。函數
從上面2點可看出,設計時數據源的運行比較廣:配置報表、測試、運行報表。而運行時數據庫切換數據庫連接字符串便可無縫實現數據源在用戶現場部署,相對比較容易。post
下面用NWind_CHS.mdb數據源進行實戰(AR9安裝後,自帶的數據源C:\Users\rogerwang\Documents\ComponentOne Samples\ActiveReports 9\Data\NWIND.mdb)。測試
經過「視圖--其餘窗口--報表資源管理器 V9」,而後基於上講的RdlReport1.rdlx文件,雙擊rdlx文件。spa
右鍵,添加數據源設計
在新建立的數據源DataSource1,右鍵添加數據集。code
在彈出的添加數據集中,有2種辦法添加數據。orm
方法一: 直接寫SQL。 這種方式適合程序員、SQL比較強的人, 效率高。
方法二: 經過AR9新提供的VQD進行(可視化查詢設計器)。這種方法適合產品經理、需求分析師等對技術不細究的人,靈活。
這裏重點說一下方法二:VQD。
可視化查詢設計器(VQD)包含如下關鍵特性:
過濾數據
使用自定義表達式
從數據庫選擇字段
分組和合計函數
使用內鏈接,左外鏈接和右外鏈接
設置已選字段和數據表的別名
數據排序和更多特性
生成的SQL語句:
select Products.*, Categories.* from Products inner join Categories on Products.CategoryID = Categories.CategoryID
如分別拖動Description、ProductID到報表,預覽結果:
至此,完成了運行時數據源的添加,AR提供的配置數據源功能,很是靈活和方便,可有效的提升報表開發效率。
咱們在設計時配置的數據源,若是要遷移到用戶現場,則須要能夠動態修改數據源以適配用戶的數據源環境。
可經過代碼實現數據源切換(備註:數據庫表結構是如出一轍的)
private void 運行時數據源區域報表ToolStripMenuItem_Click(object sender, EventArgs e) { SectionReport_DataSource_RunTime sReport1 = new SectionReport_DataSource_RunTime(); sReport1.DataSource = GetDataSource(); sReport1.Run(); viewer1.Document = sReport1.Document; } private DataTable GetDataSource() { DataTable dt = new DataTable(); dt.Columns.Add("產品編號"); dt.Columns.Add("產品名稱"); dt.Columns.Add("單價"); dt.Columns.Add("庫存量"); dt.Rows.Add("A10002", "蘋果", 20, 50); dt.Rows.Add("A15681", "香蕉", 20, 50); dt.Rows.Add("A15681", "菠蘿", 20, 50); return dt; }
在運行時經過 DataSource 屬性設置數據源
private void 運行時數據源頁面報表ToolStripMenuItem_Click(object sender, EventArgs e) { GrapeCity.ActiveReports.PageReport pReport1 = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo("PageReport_DataSource_RunTime.rdlx")); viewer1.LoadDocument(pReport1.Document); } private void Form1_Load(object sender, EventArgs e) { viewer1.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(viewer1_LocateDataSource); } void viewer1_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args) { if (args.DataSourceName == "DataSource1") { if (args.DataSetName == "DataSet1") { args.Data = GetDataSource(); } } } private DataTable GetDataSource() { DataTable dt = new DataTable(); dt.Columns.Add("產品編號"); dt.Columns.Add("產品名稱"); dt.Columns.Add("單價"); dt.Columns.Add("庫存量"); dt.Rows.Add("A10002", "蘋果", 20, 50); dt.Rows.Add("A15681", "香蕉", 20, 50); dt.Rows.Add("A15681", "菠蘿", 20, 50); return dt; }
在運行時經過 LocateDataSource 事件加載數據源。
最後,順便說一下:ActiveReport 能夠和多種數據源交互,包括OLEDB, SQL, XML,Oracle、Sybase、Informix、SQL Server等。
參考的官方博客:
----------------------------------------------------------------------------------------------------------
ActiveReports 9實戰教程目錄: