深入QuickReport圖文教程.doc_第1頁
深入QuickReport圖文教程.doc_第2頁
深入QuickReport圖文教程.doc_第3頁
深入QuickReport圖文教程.doc_第4頁
深入QuickReport圖文教程.doc_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

深入QuickReport(一)作者:董維春(本文已在CSDN開發(fā)高手04年第一、二、三期上發(fā)表,應(yīng)廣大網(wǎng)友的要求,經(jīng)編輯同意,發(fā)表在CSDN作者本人文檔中,略有修改,但僅即于此,未經(jīng)CSDN或作者本人同意任何個(gè)人與網(wǎng)站不得轉(zhuǎn)載、摘抄,否則任何涉及到版權(quán)的行為后果自負(fù))報(bào)表是數(shù)據(jù)庫應(yīng)用程序的基本組成部分之一,完整的數(shù)據(jù)庫應(yīng)用程序總要提供報(bào)表功能。與傳統(tǒng)的數(shù)據(jù)庫應(yīng)用程序設(shè)計(jì)工具相比,C+ Builder中提供了QuickReport組件,使C+ Builder的數(shù)據(jù)庫功能得到了極大的豐富。QuickReport是挪威Qusoft AS公司專門為C+ Builder設(shè)計(jì)的用于報(bào)表的一組控件,在C+ Builder上我們使用的QuickReport與專業(yè)版的QuickReport相比,在功能上還有很大的差距,但對(duì)于我們來說只要充分利用好她,就可以非??旖莸脑O(shè)計(jì)出功能強(qiáng)大、模式多樣的數(shù)據(jù)報(bào)表,最重要的是她不需要我們花額外的錢去購買。其實(shí)QuickReport并不難,但介紹的這方面的內(nèi)容實(shí)在太少,并且她的幫助文檔寫得也不太好,讓那些想學(xué)習(xí)QuickReport的C+Builder愛好者找不到一個(gè)正確的、合適的方法。如果你想了解她、使用她,那好吧,讓我來幫你認(rèn)識(shí)這個(gè)妖女吧,如果此文對(duì)你能有所幫助,那是我最大的快樂!第一部分:QuickReport基本知識(shí)BCB引進(jìn)的Qusoft公司的報(bào)表組件系列,它包括多個(gè)組件。首先有必要先簡單的了解一下這二十三個(gè)組件的基本位置與功能。一、組件功能簡介上面的兩個(gè)圖是QuickReport組件頁的中所有組件,在BCB6中提供給我們使用的不會(huì)少于上面的23個(gè)的。下表是按上圖中組件的位置先后,對(duì)各控件的使用功能逐一做了簡單的介紹:1)QuickRep帶有坐標(biāo),作為其他報(bào)表控件(如TQRBand)的容器,通過它的Band屬性可以自動(dòng)添加各種類型的TQRBand重要屬性(Properties)使用說明DataSet連結(jié)數(shù)據(jù)來源,一般是ADO/BDE連接組件的名字Page紙張的設(shè)置,可展開BottomMargin10.0mm報(bào)表下邊界尺寸Columns1報(bào)表分欄數(shù),默認(rèn)為1欄ColumnSpace0.0mm報(bào)表欄與欄間隔尺寸,Columns值大于1時(shí)有效LeftMargin10.0mm報(bào)表左邊界尺寸Length210.0mm報(bào)表長度尺寸,與PaperSize設(shè)置相關(guān)OrientationpoPortraitpoLandscape報(bào)表方向 打印方向,有下面兩個(gè)值:直印poPortrait、橫印poLandscapePaperSizeA4報(bào)表打印紙張大小RightMargin10.0mm報(bào)表右邊界尺寸Rulertrue報(bào)表標(biāo)尺顯示TopMargin10.0mm報(bào)表上邊界尺寸Width297.0mm報(bào)表寬度尺寸,與PaperSize設(shè)置相關(guān)PrinterSettingCopies1報(bào)表復(fù)制份數(shù)Duplexfalse報(bào)表雙重打印FirstPage0報(bào)表打印起始頁LastPage0報(bào)表打印終止頁OutPutBinAuto報(bào)表輸出種類ReportTitle報(bào)表預(yù)覽打印標(biāo)題Unitsmm報(bào)表設(shè)計(jì)階段顯示標(biāo)尺單位2)QRSubDetail建立一個(gè)主/明細(xì)(master/detail) 報(bào)表,連接明細(xì)文件的組件3)QRStringsBand可建立一讀取TStrings中項(xiàng)次值的組件。在這個(gè)組件里有一個(gè)Items屬性,若Items一個(gè)值(一行空、一回車行)都沒有,那他上面的組件將不會(huì)起作用。當(dāng)String List Editor中有幾行,該組件上的內(nèi)容就重復(fù)幾次。若只有一行內(nèi)容時(shí),她與一個(gè)DetailBand是一樣的;而多行時(shí),也是差不多的,即先重復(fù)該區(qū)段內(nèi)的可視組件幾次(幾行就幾次),然后下一個(gè)再重復(fù)。比如三行,那就是第一個(gè)數(shù)據(jù)來三行,然后第二個(gè)數(shù)據(jù)來三行,再然后,直到最后4)QRBand用來確定在報(bào)表的不同位置應(yīng)該顯示什么內(nèi)容,它上面可以放控件5)QRChildBand在報(bào)表中基礎(chǔ)子項(xiàng)條列組件。他有一個(gè)ParentBand屬性,你必須把他與其它band連接起來,只有這樣在她里面布置的組件才有效。說直接就是已經(jīng)有了一個(gè)Band而你還需要一個(gè)這樣的組件,那就用她吧6)QRGroup在報(bào)表中對(duì)資料做邏輯上分組的組件。當(dāng)你連接了幾個(gè)datasets到報(bào)表時(shí)可以通過Groups成組的對(duì)dataset進(jìn)行操作7)QRLabel打印靜態(tài)的文本(即不是根據(jù)數(shù)據(jù)庫值來改變的),作用象Tlabel 。 Caption的內(nèi)容就打印出來的內(nèi)容;AutoStretch是布爾型變量,當(dāng)標(biāo)簽標(biāo)題在設(shè)定范圍內(nèi)不能打印時(shí),該屬性將起作用,若為true,報(bào)表將繼續(xù)打印沒有打印完的文本,其它需要打印的文本將依次向后移動(dòng),反之,則超出部分不被打印8)QRDBText在報(bào)表中具有顯示連結(jié)資料來源的文字功能的組件9)QRExpr在報(bào)表中具有顯示陳述句或計(jì)算表示式值的組件10)QRSysData在報(bào)表中具有顯示系統(tǒng)信息的組件11)QRMemo在報(bào)表中顯示備注文字的組件12)QRExprMemo在報(bào)表中是TQRExpr和TQRMemo的混合組件13)QRRichText在報(bào)表中具有顯示區(qū)域文字功能的組件14)QRDBRichText在報(bào)表具有顯示連結(jié)資料來源的區(qū)域文字功能的組件15)QRShape在報(bào)表中處理幾何圖形的組件,如方形、圓角方形、橢圓16)QRImage在報(bào)表中顯示靜態(tài)的圖片,包括(BMP,WMF,ICON)17)QRDBImage在報(bào)表中顯示從數(shù)據(jù)庫接收的圖片18)QRCompositeReport在報(bào)表中連結(jié)有關(guān)與無關(guān)的報(bào)表組件,用于創(chuàng)建混合報(bào)表的組件,可以把兩個(gè)或兩個(gè)以上的報(bào)表連接在一起,組成一個(gè)報(bào)表19)QRPreview在執(zhí)行階段建立自訂預(yù)覽報(bào)表組件20)QRTextFilter將報(bào)表內(nèi)容輸出于ASCII text文件21)QRCSVFilter將報(bào)表內(nèi)容輸出于CSV文件22)QRHTMLFilter將報(bào)表內(nèi)容輸出于HTML文件23)QRChart可以在報(bào)表上應(yīng)用的圖表工具二、組件關(guān)系表下圖說明了與QuickReport相關(guān)組件之間的連接與關(guān)系:ADOTable=|QRChilderBandDataBase=ADO=|=QuickRep=QRBand=可視化組件ADOQueryPreview();就可以了。沒有人希望那個(gè)什么也不顯示的TQuickRep組件擺在窗體上,這也告訴我們一點(diǎn)我們的程序中最好有兩個(gè)Form:一個(gè)是放置控制QuickReport顯示、打印或?qū)崿F(xiàn)其它功能的,比如本例中放置控制按扭;一個(gè)是提供給QuickReport布置組件的。當(dāng)然這不是說在一個(gè)Form中實(shí)現(xiàn)不了上述功能,其實(shí)你只要在窗體的OnCreate事件中把TQuickRep組件隱藏起來就可以了:void _fastcall TForm1:Form1Create(TObject *Sender)QuickRep1-Hide();要注意QR你不能用Show()調(diào)用,那你將得不到你想要的程序,當(dāng)然用Preview()就沒錯(cuò)了。以下是本例的程序源代碼:#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;/-_fastcall TForm1:TForm1(TComponent* Owner): TForm(Owner)/-void _fastcall TForm1:Form1Create(TObject *Sender)QuickRep1-Hide();/-void _fastcall TForm1:Button1Click(TObject *Sender)QuickRep1-Preview();/-進(jìn)一步思考:有時(shí)我們想實(shí)現(xiàn)垂直輸出,比如用TQRLabel里的內(nèi)容我們想垂直顯示能否實(shí)現(xiàn)?當(dāng)然能實(shí)現(xiàn)。只要我們按如下設(shè)置就可以實(shí)現(xiàn):AutoSize=false;/默認(rèn)為trueAutoStrech=true;/ 默認(rèn)為falseWordWrap=true;/ 默認(rèn)為true,這是設(shè)置中的重點(diǎn),這與Label中的設(shè)置是一樣的Caption的值要注意,每個(gè)字符間一定要有空格;/一般的設(shè)置我們不會(huì)留空格,因?yàn)樵O(shè)計(jì)空格除了美觀,沒什么實(shí)際意義,但在這里必須留空格進(jìn)一步思考:我們想顯示有兩位小數(shù)的數(shù)字,應(yīng)該如何辦呢?只要把該可視化組件的mask屬性設(shè)為0.00就可以實(shí)現(xiàn)了。例二:TQRGroup、TQRExpr組件的應(yīng)用該報(bào)表先列出州名,接著列出該州的所有公司及公司總數(shù),一個(gè)州列完后空一行(Group中斷),列出新的州名,接著列新州下的所有公司,沒有填州名的公司統(tǒng)一列在“不清楚什么地區(qū)的”下面。1)新建一個(gè)Project。2)放一個(gè)TQuery在TForm上,其SQL屬性為:select * from customer order by State,Company,即根據(jù)州、公司排序,DatabaseName為BCDEMOS,Active為true。3)放一個(gè)TQuickRep控件在Form1上,DataSet為Query1。4)放一個(gè)TQRBand在TQuickRep上面,把其BandType設(shè)成rbDetail。5)放一個(gè)TQRGroup控件在TQuickRep上,這時(shí)默認(rèn)為Group Header。(任何時(shí)候當(dāng)Group中斷或更高級(jí)別的Group中斷,這個(gè)Header都將打印出來,如果有表達(dá)式,根據(jù)表達(dá)式的值顯示內(nèi)容),接著添加一個(gè)Group Footer Band,但我們卻不能找到這樣的一個(gè)組件,那應(yīng)該如何設(shè)計(jì)出Group Footer Band區(qū)段呢?我們只要放一個(gè)QRBand2在報(bào)表上,把TQRGroup的FooterBand屬性指向QRBand2,看一下,QRBand2是不是變成了Group Footer Band。(TQRGroup的一個(gè)重要特性是表達(dá)式,任何時(shí)候當(dāng)表達(dá)式的值改變時(shí),Group都將中斷,如表達(dá)式是按省列出城市名,當(dāng)前列出遼寧省,當(dāng)屬于遼寧省的城市列完后,表達(dá)式值改變,這時(shí)Group中斷,接著顯示其他省的城市名),TQRGroup1的Expression屬性設(shè)為Query1.State(根據(jù)不同的州來中斷)。注意:為什么不直接再放一個(gè)TQRGroup,因?yàn)闊o論我們放多少個(gè)系統(tǒng)都會(huì)默認(rèn)為 Group Header。6)放一個(gè)TQRExpr控件在Group Header上面,其Expression屬性為:IF(Query1.State ,Query1.State,不清楚什么地區(qū)的),即如果公司的州沒填,就歸入“不清楚什么地區(qū)的”,否則歸入具體的州。7)放三個(gè)TQRDBText在Detail上,他們的DataSet都指向Query1,DataField分別指向Company、Contact、Phone。8)再放一個(gè)TQRExpr控件在Group FooterBand上面,Expression為Query1.State+共有:+STR(COUNT)+個(gè)公司,作用是在每個(gè)州的公司列完后顯示這個(gè)州總共有多少個(gè)公司。9)把鼠標(biāo)放在QuickRep組件上(不能放在Band區(qū)段上),按右鍵選預(yù)覽,應(yīng)該看到不同的州名及其公司名稱和該州公司總數(shù)。注意:大家發(fā)現(xiàn)看到并不是每個(gè)州公司的總數(shù),每個(gè)州后列出的都是把上一個(gè)州的總數(shù)也加上的累計(jì)值,難道是我們錯(cuò)了,沒有,檢查一下你的Expression組件(運(yùn)行COUNT那個(gè))的ResetAfterPrint的屬性值是否為true,如果不是把他改為true,現(xiàn)在看一下J進(jìn)一步思考:每一組內(nèi)容都聯(lián)在一起,有些不爽,要是每組內(nèi)容之間被什么分隔開就好了?其實(shí)這并不難實(shí)現(xiàn),我們只要把QRBand2(group Footer)的HasChild屬性設(shè)為true就可以了。當(dāng)然你直接把一個(gè)TQRChildBand組件放在QuickRep1上,把她的ParentBand屬性設(shè)置為QRBand2,同樣可以實(shí)現(xiàn)上面的設(shè)置。另外我們同樣可以在TQRChildBand布置其它可視化組件J進(jìn)一步思考:要是每組結(jié)束后就換頁,那不是更爽嗎?只要我們把QRGroup1的ForceNewPage屬性改為true就可以了,同樣的組件還有一個(gè)ForceNewColumn。但一定要注意,我們改了哪個(gè)區(qū)段的這兩個(gè)屬性,就從哪個(gè)區(qū)段開始NewPage/NewColumn。例三、TQuickRep組件的Page屬性應(yīng)用PVC胸卡有些朋友一定見過,做這樣的卡片并不太難,最近筆者就參與制作了一批胸卡,這里我們要講的是卡片的設(shè)計(jì)。1)新建一個(gè)Project。2)放一個(gè)Table組件,把它指向我們的資源數(shù)據(jù)庫,并把Active設(shè)為true。3)放置一個(gè)TQuickRep組件在Form1上,并把它DataSet設(shè)置為Table1,在她上面放一個(gè)TQRBand,把其BandType值設(shè)置成rbDetail。在Band區(qū)段上面按下圖放置好四個(gè)TQRLabel組件、三個(gè)TQRDBText組件與一個(gè)TQRDBImage組件。4)三個(gè)TQRDBText組件的設(shè)置基本上一樣的,把DataSet指定為Table1,然后在從DataField中選取正確的字段。我們可以同樣的設(shè)置好TQRDBImage的相關(guān)屬性。5)對(duì)頁面進(jìn)行設(shè)置,這是關(guān)鍵。一張紙上我們不可能只打印一個(gè),打印得越多越多好,左邊打完,在右邊繼續(xù)打印,這樣才能充分利用原材料。我們這里用到了分欄,把Number of columns屬性設(shè)為2,也就是分兩欄。在TQuickRep中使用組件的快捷菜單Reportsettings打開Page的屬性編輯器窗口,做如下設(shè)置:其中Pager size選擇為自定義,在其后輸入紙的大小 ,其它設(shè)置按上圖即可。當(dāng)然我們也可以在對(duì)象查看器窗口單擊Page屬性左端的編輯按鈕,展開其屬性值來進(jìn)行正確的設(shè)置,如下圖:6)TQRBand的Width設(shè)為228,然后重新調(diào)整好Band上組件的位置。228實(shí)際上是由386得到的。7)把鼠標(biāo)放在QuickRep組件上(不能放在Band區(qū)段上),按右鍵選預(yù)覽,看一下效果吧。難點(diǎn):為了定位方便、準(zhǔn)確,TQuickRep組件提供了坐標(biāo)(一格一格的,邊上帶數(shù)字的,不會(huì)告訴我沒看見吧J),從對(duì)紙張的設(shè)置我們知道這些坐標(biāo)每整格相距為10mm,但在QR中,很多組件都沒有單位,對(duì)于這10 mm,QR中對(duì)應(yīng)的單位長度是38,這一點(diǎn)你一定要記住。通過上面的三個(gè)例子,我們已經(jīng)可以進(jìn)行了一些簡單的報(bào)表設(shè)計(jì),從例四開始我們將進(jìn)一步的學(xué)習(xí)QuickReport,下面例程也只講關(guān)鍵點(diǎn),著重分析,省略一些重復(fù)性的語言。例四、主/明細(xì)(Master/Detail)報(bào)表與TQRSubDetail組件的應(yīng)用設(shè)計(jì)主/明細(xì)報(bào)表的關(guān)鍵有兩點(diǎn):一是主/明細(xì)數(shù)據(jù)表的連接;二是對(duì)TQRSubDetail組件的正確使用。主從數(shù)據(jù)表連接示意圖1(TTable與TTable)Master表關(guān)聯(lián)Detail表組件名TTableTDataSource1TTable重要屬性Name= DataSetNameTableNameName=DataSourceDabaseNameDabaseName(指定索引字段)IndexFieldNameMasterField(點(diǎn)擊右側(cè)“”調(diào)出Field Link Designer對(duì)話框,設(shè)置好關(guān)聯(lián)字段)ActiveActive主從數(shù)據(jù)表連接示意圖2(TTable與TQuery)Master表關(guān)聯(lián)Detail表組件名TTableTDataSource1TTQuery重要屬性Name= DataSetNameTableNameName=DataSourceDabaseNameDabaseName(指定索引字段)IndexFieldNameSQL(點(diǎn)擊右側(cè)“”調(diào)出StringlistEditor對(duì)話框設(shè)置好關(guān)聯(lián)字段)ActiveActiveTQRSubDetail組件的設(shè)置:1)Master的值設(shè)為所在TQuickRep組件的名;2)DataSet的值設(shè)為連接明細(xì)表的組件名;3)點(diǎn)擊Bands前面的“+”,展開屬性,能看到HasFooter與HasHeader兩個(gè)屬性,把其值設(shè)為true,這樣我們就得到了一對(duì)Group(當(dāng)然完全我們完全可以用別的方法)。注意:通過TQRSubDetail屬性Band里的HasHeader、HasFooter產(chǎn)生的Group組,在Group Header中沒有Expression,她們默認(rèn)按主/明細(xì)表的關(guān)聯(lián)關(guān)系分組。其實(shí)沒有他們,TQRSubDetail也是這樣用的。我們建立如下圖的主/明細(xì)報(bào)表:1)設(shè)置數(shù)據(jù)集在窗體上放置TTable、TDataSource、TQuery組件,把Table1、Query1的DatabaseName屬性設(shè)置為BCDEMOS,把Table1的TableName設(shè)為customer.db(主表名),把IndexFieldName設(shè)為索引字段名CustNo。把DataSource1的DataSet設(shè)為Table1,為做主/明細(xì)數(shù)據(jù)做好準(zhǔn)備。連接明細(xì)表的Query1,我們把其DataSource設(shè)為DataSource1,從而建立關(guān)聯(lián)關(guān)系,并將其SQL屬性設(shè)成:SELECT*FROMorders WHERE CustNo =:CustNo| |選擇所有字段從orders表(從表)條件從表的字段建立主從關(guān)系主表字段這樣我們就建立了明細(xì)表與主表的關(guān)聯(lián),明細(xì)表是按上式關(guān)系分組的,就是把CustNo一樣的放在一起。2)設(shè)置報(bào)表結(jié)構(gòu)首先,在前面設(shè)計(jì)的窗體上放置一個(gè)報(bào)表組件TQucikRep,在對(duì)象查看器窗口中把Band屬性展開,將其HasColumnHeader、HasDetail、HasPageFooter、HasPageHeader、HasSummary和HasTitle屬性設(shè)為true。把QuickRep1的DataSet屬性設(shè)為Table1,為報(bào)表主表指定數(shù)據(jù)源。然后,把TQRSubDetail組件放到QuickRep1組件上,作為明細(xì)表Band區(qū)段。把其Master屬性設(shè)置為QuickRep1,設(shè)置Bands的子屬性HasHeader和HasFooter為true,并將其DataSet屬性設(shè)置為Query1,指定明細(xì)表數(shù)據(jù)來源。3)設(shè)置主/明細(xì)報(bào)表的主體在ColumnHeaderBand1區(qū)段中添加主表中各字段的標(biāo)題使用的報(bào)表標(biāo)簽組件(TQRLable),它們的Caption分別為客戶號(hào)、公司、電話、傳真和所在城市。在DetailBand1區(qū)段中添加顯示主表字段值的報(bào)表組件(TQRDBText),與前面標(biāo)題對(duì)應(yīng)設(shè)置其字段,要注意的是它們的DataSet都為Table1。在明細(xì)報(bào)表部分,我們首先在GroupHeaderBand1中放置明細(xì)表的表頭標(biāo)簽(TQRLable),它們的Caption依次設(shè)置為定單號(hào)、條款、付款方式、款項(xiàng)總額和未付款額。在QRSubDetail1區(qū)段中放置顯示明細(xì)報(bào)表的組件對(duì)象(TQRDBText),其DataSet屬性全設(shè)為Query1,字段名稱依次是OrderNo、Terms、PaymentMethod和ItemsTotal。接著添加一個(gè)TQRExpr組件,設(shè)置其Master屬性為QRSubDetail,打開表達(dá)編輯器,輸入下面的表達(dá)式:INT(Query1.ItemsTotal-Query1.AmounPaid)在GroupFooterBand1區(qū)段中添加統(tǒng)計(jì)報(bào)表組件QRExpr2,并將其屬性設(shè)置為QRSubDetail1,打開表達(dá)式編輯器,輸入如下表達(dá)式:SUM(INT(Query1.ItemsTotal-Query1.AmounPaid)即計(jì)算未付款項(xiàng)的總額,并設(shè)置ResetAfterPrinter屬性為true,這樣,就可以統(tǒng)計(jì)出明細(xì)表的總額了。在SummaryBand1區(qū)段中添加一個(gè)QRExpr3,打開表達(dá)式編輯器,在其中輸入如下語句:SUM(INT(Query1.ItemsTotal-Query1.AmounPaid)這樣這個(gè)報(bào)表的主體我們就做完了,其它設(shè)置看一下上面的圖你就應(yīng)該明白了。下面我們?cè)偬砑永恢械哪菢拥某绦虼a,至此這樣的一個(gè)復(fù)雜報(bào)表我們就完成了。本例是用TTable與TQuery做的主/明細(xì)數(shù)據(jù)關(guān)聯(lián),同樣我們可以用TTable與TTable做主/明細(xì)數(shù)據(jù)關(guān)聯(lián),實(shí)現(xiàn)本例這樣的報(bào)表。深入QuickReport(三)作者:董維春(本文已在CSDN開發(fā)高手04年第一、二、三期上發(fā)表,應(yīng)廣大網(wǎng)友的要求,經(jīng)編輯同意,發(fā)表在CSDN作者本人文檔中,略有修改,但僅即于此,未經(jīng)CSDN或作者本人同意任何個(gè)人與網(wǎng)站不得轉(zhuǎn)載、摘抄,否則任何涉及到版權(quán)的行為后果自負(fù))第三部分:報(bào)表中的其他問題通過前兩部分的學(xué)習(xí),我想你對(duì)QuickRep已經(jīng)有了一定的掌握,在這部分我們對(duì)報(bào)表設(shè)計(jì)中的其他一些問題做一下簡單介紹,也許這些你并不常用,但同樣這些內(nèi)容對(duì)于我們學(xué)習(xí)QuickRep還是有很大益處的。此部分內(nèi)容都以例程的形式講解,為了保持文章的完整性,例子的編號(hào)接上部分。例五、報(bào)表的連接及保存通過上面的例子,你也許會(huì)動(dòng)手做了幾個(gè)報(bào)表,有時(shí)你一定會(huì)想把其中的一些報(bào)表連接起來,組成一個(gè)綜合報(bào)表,并作為整體來操作。在BCB中實(shí)現(xiàn)這一點(diǎn)并不難,我們這時(shí)要用到TQRCompositeReport組件。它提供了一個(gè)OnAddReprots事件,在創(chuàng)建報(bào)表時(shí)將觸發(fā)這個(gè)事件,因此我們只要在這個(gè)事件中用Add方法將需要連接在一起的報(bào)表添加到該組件的事件中就可以了。下面給出一個(gè)示例程序段,這是把兩個(gè)報(bào)表添加到綜合報(bào)表中的,代碼如下:void _fastcall TForm1:QRCompositeReportAddReports(TObject *Sender)(TQRCompositeReport*)Sender)-Reports-Add(Form2-QuickRep1);/添加第一個(gè)報(bào)表(TQRCompositeReport*)Sender)-Reports-Add(Form3-QuickRep1);/添加第二個(gè)報(bào)表做好的報(bào)表我們一定都想保存起來,保存的文件格式有:文本格式文件(TXT),組件TQRTextFilter;超文本格式文件(HTML/HTM),組件TQRHTMLFilder;逗號(hào)分隔文件(CSV),組件TQRCSVFilter;以及報(bào)表文件。保存前三種格式文件需要調(diào)用ExportToFilter方法,而直接保存報(bào)表組件,則只需用Save。這個(gè)例子中我們放了一個(gè)TSaveDialog對(duì)話框和QuickReport組件頁中的TQRTextFilter、TQRHTMLFilder、TQRCSVFilter三個(gè)組件。完整的代碼如下:void _fastcall TForm1: SaveRepo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論