原創|使用教程|編輯:龔雪|2014-02-26 14:29:34.000|閱讀 1195 次
概述:NCReport是一款輕量級、快速、多平臺、簡單易用的基于Qt toolkit的C++編寫的報表解決方案,目前主要包括報表渲染庫和報表設計器GUI應用程序。本文主要講解NCreport報表控件中的子查詢系統的設計。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
數據報表中經常需要用到主從數據關系,比如發票、訂單等一類的特殊文件,在報表控件NCreport中也不例外。數據報表至少有一個表頭和一個通過主鍵和外鍵關聯的相關細節數據集。子查詢系統則是通過父數據源驅動重復的執行SQL子查詢,這個可以通過一個ID組實現,而這個組大部分是父主鍵和子外鍵。由于這個數據是通過SQL命令進行數據庫檢索,所以這個工作主要是針對于SQL數據源。
在后面將會創建一個像上面的三層的數據源層次結構,來講解如何定義主從關系的數據源。
定義一個父數據源
首先在數據源對話框中添加主數據源,通過在設計器中點擊“報表”>> “數據源和添加一個新的SQL數據源”,設置Opening role為報表的開始,這就意味著當在報表開始的時候查詢將會被執行,鍵入數據源ID,設置屬性關系并在SQL編輯器文本框中編輯SQL查詢。
下面的示例是主查詢客戶:
SELECT customers.CustomerID, customers.CompanyName, customers.CompanyName FROM orders INNER JOIN customers ON orders.CustomerID=customers.ContactName WHERE OrderDate between ’2005-03-01’ and ’2005-03-31’ GROUP BY CustomerID
定義子數據源
在數據源對話框中,我們必須要在父/子結構中添加多于2個的數據源,第一個的時候就需要添加一個新的SQL數據源。設置Opening role為Child datasource,這個就是說當處理下一個主記錄時,就會重復的執行查詢。鍵入數據源ID,并在SQL關系面板中設置關系屬性,之后鍵入父數據源ID,這個ID就是之前定義的父數據源。
在sql文本框編輯器中編輯SQL查詢,這個是第一個子查詢,它將會在一段日期時間內查詢和用戶相關的訂單頭。
SELECT OrderID,CustomerID,EmployeeID,OrderDate,ShipName FROM orders WHERE CustomerID=’$D{customers.CustomerID}’ AND OrderDate between ’2005-03-01’ and ’2005-03-31’ ORDER BY OrderID
從這里可以看出,數據關系現在是由一個關系表達式$D{customers.- CustomerID}來管理,我們需要插入父數據源的key值到SQL命令中。
之后出現第二個子數據源,這個是第三層關系,設置Opening role為Childdatasource,鍵入Parent data source id,并在SQL編輯器文本框中編輯SQL查詢,這個查詢將把檢索命令項關聯到一個指定的命令ID:
SELECT OrderID, orderitems.UnitPrice, Quantity, Itemno, products.productname, orderitems.UnitPrice Quantity as Value * FROM orderitems INNER JOIN products ON orderitems.productID = products.productID WHERE OrderID=$D{orders.OrderID} ORDER BY Itemno
設置的Detail部分
在這一步就是要指定合適的數據源到Detail部分,打開Report>Details and grouping…菜單,就會出現Detail部分的屬性對話框,選擇之前定義好的在結構上最低層的數據源。
報表設計
在定義完數據源并指定它們到Detail之后,我們需要通過數據組按鈕添加屬性組到Detail,就像通常的每個數據源層關系到一個組層。
添加其他報表部分和報表項目并設置對齊,最終的報表效果如下所示:
>>>NCReport下載
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都科技