原創(chuàng)|使用教程|編輯:龔雪|2014-02-26 14:29:34.000|閱讀 1195 次
概述:NCReport是一款輕量級、快速、多平臺、簡單易用的基于Qt toolkit的C++編寫的報(bào)表解決方案,目前主要包括報(bào)表渲染庫和報(bào)表設(shè)計(jì)器GUI應(yīng)用程序。本文主要講解NCreport報(bào)表控件中的子查詢系統(tǒng)的設(shè)計(jì)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
數(shù)據(jù)報(bào)表中經(jīng)常需要用到主從數(shù)據(jù)關(guān)系,比如發(fā)票、訂單等一類的特殊文件,在報(bào)表控件NCreport中也不例外。數(shù)據(jù)報(bào)表至少有一個表頭和一個通過主鍵和外鍵關(guān)聯(lián)的相關(guān)細(xì)節(jié)數(shù)據(jù)集。子查詢系統(tǒng)則是通過父數(shù)據(jù)源驅(qū)動重復(fù)的執(zhí)行SQL子查詢,這個可以通過一個ID組實(shí)現(xiàn),而這個組大部分是父主鍵和子外鍵。由于這個數(shù)據(jù)是通過SQL命令進(jìn)行數(shù)據(jù)庫檢索,所以這個工作主要是針對于SQL數(shù)據(jù)源。
在后面將會創(chuàng)建一個像上面的三層的數(shù)據(jù)源層次結(jié)構(gòu),來講解如何定義主從關(guān)系的數(shù)據(jù)源。
定義一個父數(shù)據(jù)源
首先在數(shù)據(jù)源對話框中添加主數(shù)據(jù)源,通過在設(shè)計(jì)器中點(diǎn)擊“報(bào)表”>> “數(shù)據(jù)源和添加一個新的SQL數(shù)據(jù)源”,設(shè)置Opening role為報(bào)表的開始,這就意味著當(dāng)在報(bào)表開始的時候查詢將會被執(zhí)行,鍵入數(shù)據(jù)源ID,設(shè)置屬性關(guān)系并在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
定義子數(shù)據(jù)源
在數(shù)據(jù)源對話框中,我們必須要在父/子結(jié)構(gòu)中添加多于2個的數(shù)據(jù)源,第一個的時候就需要添加一個新的SQL數(shù)據(jù)源。設(shè)置Opening role為Child datasource,這個就是說當(dāng)處理下一個主記錄時,就會重復(fù)的執(zhí)行查詢。鍵入數(shù)據(jù)源ID,并在SQL關(guān)系面板中設(shè)置關(guān)系屬性,之后鍵入父數(shù)據(jù)源ID,這個ID就是之前定義的父數(shù)據(jù)源。
在sql文本框編輯器中編輯SQL查詢,這個是第一個子查詢,它將會在一段日期時間內(nèi)查詢和用戶相關(guān)的訂單頭。
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
從這里可以看出,數(shù)據(jù)關(guān)系現(xiàn)在是由一個關(guān)系表達(dá)式$D{customers.- CustomerID}來管理,我們需要插入父數(shù)據(jù)源的key值到SQL命令中。
之后出現(xiàn)第二個子數(shù)據(jù)源,這個是第三層關(guān)系,設(shè)置Opening role為Childdatasource,鍵入Parent data source id,并在SQL編輯器文本框中編輯SQL查詢,這個查詢將把檢索命令項(xiàng)關(guān)聯(lián)到一個指定的命令I(lǐng)D:
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
設(shè)置的Detail部分
在這一步就是要指定合適的數(shù)據(jù)源到Detail部分,打開Report>Details and grouping…菜單,就會出現(xiàn)Detail部分的屬性對話框,選擇之前定義好的在結(jié)構(gòu)上最低層的數(shù)據(jù)源。
報(bào)表設(shè)計(jì)
在定義完數(shù)據(jù)源并指定它們到Detail之后,我們需要通過數(shù)據(jù)組按鈕添加屬性組到Detail,就像通常的每個數(shù)據(jù)源層關(guān)系到一個組層。
添加其他報(bào)表部分和報(bào)表項(xiàng)目并設(shè)置對齊,最終的報(bào)表效果如下所示:
>>>NCReport下載
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都科技