使用ActiveReport for net 進(jìn)行報(bào)表開發(fā)_第1頁(yè)
使用ActiveReport for net 進(jìn)行報(bào)表開發(fā)_第2頁(yè)
使用ActiveReport for net 進(jìn)行報(bào)表開發(fā)_第3頁(yè)
使用ActiveReport for net 進(jìn)行報(bào)表開發(fā)_第4頁(yè)
使用ActiveReport for net 進(jìn)行報(bào)表開發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

使用ActiveR進(jìn)行報(bào)表開發(fā)(一)—開始ActiveReport是.net下的一個(gè)出色的報(bào)表開發(fā)程序,雖然和水晶報(bào)表相比,名氣不那么大,甚至有很多人不知道它的存在,但是并不妨礙它在.net報(bào)表開發(fā)中的出色表現(xiàn),本文將一步一步地介紹如何使用它和VS2005開發(fā).net報(bào)表。1.安裝:你可以從DataDynamics的網(wǎng)站上下載最新的ActiveR2,你可以免費(fèi)使用,但是在生成的報(bào)表最下邊有水印,不過不影響報(bào)表的整體美觀。下載后直接安裝就可以了。安裝完后會(huì)看到開始-程序菜單里的DataDynamics的目錄,里面包括了,幫助,例子程序等。第一個(gè)Winform報(bào)表程序。在安裝完成后,啟動(dòng)VS2005,會(huì)看到啟動(dòng)界面上有ActiveReport的圖標(biāo),進(jìn)入后新建一個(gè)工程,并且給工程添加新文件,在文件類型中就可以看到ActiveReport文件的圖標(biāo)。給報(bào)表文件命名為ActiveReport1,確定后會(huì)看到項(xiàng)目中有一個(gè)ActiveReportl.rpx文件,這個(gè)就是報(bào)表文件了。打開文件,就是報(bào)表的設(shè)計(jì)界面,在這里可以看到三部分,PageHeader(表頭),Detail(明細(xì)),PageFooter(表尾)。打開工具箱,給Detail部分隨便添加一個(gè)Label。下面就要顯示這個(gè)報(bào)表了,在Form上添加一個(gè)Viewer控件,如果工具箱里沒有,可以通過配置工具箱來找到它。Viewer添加完后,在Form中寫代碼:ActiveReports1rpt=newActiveReports1();rpt.Run();this.viewer1.Document=rpt.Document;然后F5運(yùn)行,就可以看到在Viewer控件中顯示報(bào)表了。要注意的是,項(xiàng)目名稱不要命名為ActiveReport,否則會(huì)提示找不到ActiveReport.rpx文件。第一個(gè)web報(bào)表程序。Web方式的報(bào)表開發(fā)方式和winform的差不多,不同的是,web方式下需要作一些配置,配置過程不再累述,可以在幫助里搜索“ManuallyConfiguringWebSamples",按照里面的步驟對(duì)IIS作配置。要注意的是,如果使用的是VS2005,那么可以不作配置,只要在創(chuàng)建Web項(xiàng)目的時(shí)候文件位置選項(xiàng)設(shè)置為“文件系統(tǒng)”就可以直接運(yùn)行了。還要注意的是,在web方式下,需要在web.config文件中添加下面這段:<httpHandlers><addverb="*"path="*.rpx"type="DataDynamics.ActiveReports.Web.Handlers.RpxHandler,ActiveReports.Web,Version=238,Culture=neutral,PublicKeyToken=cc4967777c49a3ff"/><addverb="*"path="*.ActiveReport"type="DataDynamics.ActiveReports.Web.Handlers.CompiledReportHandler,ActiveReports.Web,Version=238,Culture=neutral,PublicKeyToken=cc4967777c49a3ff"/><addverb="*"path="*.ArCacheItem"type="DataDynamics.ActiveReports.Web.Handlers.WebCacheAccessHandler,ActiveReports.Web,Version=238,Culture=neutral,PublicKeyToken=cc4967777c49a3ff"/></httpHandlers>如果是VS2005,系統(tǒng)會(huì)自動(dòng)添加。接下來的就和winform下的差不多了,不同的是,要在解決方案中新增一個(gè)“類庫(kù)”項(xiàng)目,在這個(gè)項(xiàng)目中新建報(bào)表文件,然后在Web項(xiàng)目中添加對(duì)類庫(kù)項(xiàng)目的引用,然后在頁(yè)面上添加WebViewer控件,然后編寫代碼:this.WebViewer1.Report=newYourNamespace.ActiveReports1();然后運(yùn)行界面,就可以看到在WebViewer中加載的報(bào)表了。你可以通過WebViewer的ViewType屬性來設(shè)置在頁(yè)面上如何顯示,例如,如果選擇了AcrobatReader,就會(huì)給報(bào)表生成一個(gè)PDF文檔在頁(yè)面上嵌入顯示。下次我們將演示如何在報(bào)表上加載和顯示數(shù)據(jù)使用ActiveR進(jìn)行報(bào)表開發(fā)(二)--綁定數(shù)據(jù)源在上篇隨筆中寫了一個(gè)使用ActiveR的最簡(jiǎn)單的例子,本文將演示在ActiveReport中如何綁定數(shù)據(jù)源先建一個(gè)表chartingTable,有兩個(gè)字段,OnlineUserCount,Project,通過向?qū)蒁ataSet,并拖放生成TableAdapter。接下來在報(bào)表設(shè)計(jì)器中設(shè)計(jì)顯示格式,在PageHeader中放置兩個(gè)label,分別為“項(xiàng)目”和“在線人數(shù)"。再在Detail區(qū)方式兩個(gè)對(duì)應(yīng)的Label,分別設(shè)置DataFiled為Project和OnlineUserCount,在運(yùn)行的時(shí)候?qū)?huì)看到這兩個(gè)Label顯示的是對(duì)應(yīng)字段中的內(nèi)容??梢越o報(bào)表指定DataSet或DataView作為數(shù)據(jù)源,下面演示給報(bào)表設(shè)置數(shù)據(jù)源:使用DataSet:this.chartingTableTableAdapter.Fill(this.dataSet1.ChartingTable);rpt.DataSource=this.dataSet1;rpt.DataMember=this.dataSet1.ChartingTable.TableName;rpt.Run();this.viewer1.Document=rpt.Document;使用DataView:this.chartingTableTableAdapter.Fill(this.dataSet1.ChartingTable);DataViewdv=this.dataSet1.ChartingTable.DefaultView;;rpt.DataSource=dv;dv.RowFilter="project='1'";rpt.Run();this.viewer1.Document=rpt.Document;我們還可以通過報(bào)表設(shè)計(jì)器來給報(bào)表指定數(shù)據(jù)源。在報(bào)表設(shè)計(jì)器的Detail部分的頭部,有一個(gè)數(shù)據(jù)庫(kù)一樣的小圖標(biāo),點(diǎn)擊它后會(huì)出現(xiàn)向?qū)?按照向?qū)б徊讲竭B接數(shù)據(jù)庫(kù),并定義查詢就可以了。上面演示的是使用數(shù)據(jù)集作為數(shù)據(jù)源進(jìn)行綁定,但是實(shí)際項(xiàng)目中經(jīng)常會(huì)用到使用對(duì)象集合作為數(shù)據(jù)源顯示,下一次我們將演示如何在報(bào)表上顯示一個(gè)對(duì)象集合中的數(shù)據(jù)。使用ActiveR進(jìn)行報(bào)表開發(fā)(三)—顯示對(duì)象集合中的數(shù)據(jù)上篇隨筆演示了在ActiveR中如何綁定數(shù)據(jù)源,例女廿DataSet,DataView。本文將通過一些示例代碼繼續(xù)演示如何綁定對(duì)象集合以及如何從對(duì)象集合或列表中提取數(shù)據(jù)。直接綁定:我們可以自己定義一個(gè)Collection,從IList繼承,并使其中的每個(gè)對(duì)象都是一個(gè)實(shí)體,例如:Customer和CustomerCollection。然后給ActiveReport報(bào)表的DataSource直接賦值為CustomerCollection的實(shí)例就可以了。這種綁定方法在ActiveR自帶的例子里有完整的演示。手工加載顯示對(duì)象的數(shù)據(jù):在這里要用到兩個(gè)事件:DataInitialize和FetchData。DataInitialize用來定義字段列表,獲取數(shù)據(jù)等工作,F(xiàn)etchData用來指定每個(gè)字段的值。我們簡(jiǎn)單定義一個(gè)Customer類publicclassCustomer{publicintID;publicstringName;publicstringAddress;}再給報(bào)表定義一個(gè)Customer數(shù)組,用來保存要顯示的數(shù)據(jù),比如:publicCustomer[]customers;還需要一個(gè)值來保存當(dāng)前記錄的索引:privateintindex=0;接下來在DataInitialize中定義報(bào)表有那些字段:this.Fields.Add("Name");this.Fields.Add("Address");然后在FetchData事件中添加以下代碼:if(this.index>=this.customers.Length){eArgs.EOF=true;return;}else{eArgs.EOF=false;}this.Fields["Name"].Value=customers[this.index].Name;this.Fields["Address"].Value=customers[this.index].Address;this.index+=1;這段代碼的含義就是將Customer數(shù)組中的每個(gè)Customer實(shí)例的Name和Address屬性值賦給報(bào)表的Name和Address字段。代碼中的第一個(gè)if分支是判斷是否已經(jīng)加載到了最后一條數(shù)據(jù),如果是,設(shè)置eArgs.EOF為ture,并返回,否則繼續(xù)加載下一條數(shù)據(jù)。然后我們可以將要顯示的數(shù)據(jù)放在Customers數(shù)組中,并啟動(dòng)顯示報(bào)表:Customer[]customers=newCustomer[2];Customerc=newCustomer();c.Name="James";c.Address="Noljadfallsjf";Customerc2=newCustomer();c2.Name="Joe";c2.Address="adfaafadf";customers[0]=c;customers[1]=c2;rpt.customers=customers;rpt.Run();this.viewer1.Document=rpt.Document;通過上面的示例可以看到,第二種方式雖然比較煩瑣,需要程序員自己處理很多東西,但是這樣程序員擁有完全的操控能力,特別是需要對(duì)取出的數(shù)據(jù)作很多復(fù)雜的處理時(shí),這樣的操控能力是非常重要的。在下一篇隨筆中,將展示如何使用子報(bào)表來作顯示主從表。使用ActiveR進(jìn)行報(bào)表開發(fā)(四)—顯示主從表上篇隨筆演示了在ActiveR中如何從對(duì)象集合中提取數(shù)據(jù)。本文簡(jiǎn)單介紹如何使用子報(bào)表來顯示主從表中的數(shù)據(jù)。在需要顯示主從表中的數(shù)據(jù)時(shí),使用子報(bào)表能夠提供很大的靈活性,一般就是把主表的信息顯示在detail中,如果要每頁(yè)的上方都要顯示主表,就可以放在PageHeader中。再把子表的信息放在Detail中,然后把子報(bào)表中的控件直接綁定到數(shù)據(jù)源上或者使用上篇隨筆中的提到的方式從對(duì)象集合中提取數(shù)據(jù)。使用子報(bào)表:新建報(bào)表,然后在工具箱上可以看到SubReport控件,拖放一個(gè)控件到Detail部分,用此控件來加載子報(bào)表。再新建一個(gè)報(bào)表,命名為SubReport1,接下來在主報(bào)表中寫代碼,在頁(yè)面設(shè)計(jì)器上選中Detail部分,在屬性窗口切換到事件欄,雙擊Format,將會(huì)產(chǎn)生Detail_Format事件,下面就要在這個(gè)事件里指定子報(bào)表控件所要加載的報(bào)表。由于Detail部分會(huì)進(jìn)行重復(fù)顯示的,所以,只能指定一次報(bào)表源,在這里,我們按照下面的例子:ActiveReportsub=null;privatevoidDetail_Format(objectsender,System.EventArgseArgs)if(sub==null){sub=newActiveReports2();this.SubReport.Report=sub;}}先定義一個(gè)全局的子報(bào)表,然后在Detail_Format事件中對(duì)其進(jìn)行初始化。還有要注意的一點(diǎn)是,在使用完子報(bào)表后要將其釋放,銷毀掉,具體的代碼放在主報(bào)表的ReportEnd事件中,例如:privatevoidActiveReports1_ReportEnd(objectsender,System.EventArgseArgs){sub.Document.Dispose();sub.Dispose();sub=null;}下面剩下的工作就是擺放控件并設(shè)置顯示的字段了,加載數(shù)據(jù)等等了,前面的隨筆都有介紹。下篇隨筆中將介紹如何使用ActiveR開發(fā)交叉報(bào)表。進(jìn)行報(bào)表開發(fā)(五)使用ActiveR—交叉報(bào)表進(jìn)行報(bào)表開發(fā)(五)交叉報(bào)表是一種常見的報(bào)表類型,而且開發(fā)起來也是比較煩瑣的一種報(bào)表,在ActiveReport中,對(duì)交叉報(bào)表提供了足夠的靈活性,使你能夠應(yīng)對(duì)各種復(fù)雜的業(yè)務(wù)邏輯。在上篇隨筆演示了顯示主從表后,本篇隨筆簡(jiǎn)單介紹如何制作交叉報(bào)表。交叉報(bào)表的一個(gè)常見應(yīng)用就是用作顯示銷售額的報(bào)表上,例如,顯示多個(gè)連鎖店一年內(nèi)每個(gè)月的銷售額,常把月份作為列來顯示,每個(gè)店用一行來表示:店名1月2月3月4月AC5002001000050000BC511852454545124578但是在數(shù)據(jù)庫(kù)中的存儲(chǔ)常常采用下面的方式SalesMonthShop123121AB2434232AB3232323AB12313121BC12322BC這樣就需要在顯示前對(duì)數(shù)據(jù)進(jìn)行處理,把銷售額和月份轉(zhuǎn)換到列上,我們可以在取數(shù)據(jù)時(shí)使用sql來進(jìn)行這些操作,在這里,為了演示在activeReport中的使用,把轉(zhuǎn)換放到報(bào)表里來作,為了簡(jiǎn)化例子,我們只顯示第一個(gè)季度每月的銷售額。取數(shù)據(jù):使用SelectSales,Month,ShopfromCrossReportOrderbyShop這樣的sql直接取數(shù)據(jù),不作任何合計(jì)或轉(zhuǎn)換處理。轉(zhuǎn)換:我們來定義一個(gè)簡(jiǎn)單的對(duì)象來表示最終要顯示的記錄:publicclassSale{publicdecimalmoney1;//一月publicdecimalmoney2;//二月publicdecimalmoney3;//三月publicstringshopname;}同時(shí)在定義一個(gè)Sale的集合sales,來保存轉(zhuǎn)換后的數(shù)據(jù)。由于在表中每個(gè)店會(huì)對(duì)應(yīng)多條記錄,為了把多條記錄合并為一條,要進(jìn)行下面的轉(zhuǎn)換動(dòng)作//用來保存已經(jīng)計(jì)算過的店鋪,保證每個(gè)店鋪只有一條記錄ArrayListshopname=newArrayList();while(dr.Read()){if(!shopname.Contains(dr.GetString(2)))//該店鋪的第一條記錄{Sales=newSale();s.shopname=dr.GetString(2);//取店名shopname.Add(s.shopname);if(dr.GetInt32(1)==1)//一月{s.money1=dr.GetDecimal(0);}elseif(dr.GetInt32(1)==2)//二月{s.money2=dr.GetDecimal(0);}elseif(dr.GetInt32(1)==3)//三月{s.money3=dr.GetDecimal(0);}sales.Add(s);}else//不是該店鋪的第一條記錄{Sales=(Sale)sale[sales.Count-1];if(dr.GetInt32(1)==1){s.money1=dr.GetDecimal(0);}elseif(dr.GetInt32(1)==2){s.money2=dr.GetDecimal(0);}elseif(dr.GetInt32(1)==3){s.money3=dr.GetDecimal(0)}}}3. 表示:上面是對(duì)從數(shù)據(jù)庫(kù)中取出的記錄作轉(zhuǎn)換,將其變成在報(bào)表上要顯示的格式。接下來就要在報(bào)表上顯示Sales集合中的數(shù)據(jù)了。我們可以按照前幾篇隨筆中介紹的方法來作:在界面上擺放控件,并設(shè)置其FiledName字段在報(bào)表的Datalnitialize事件中設(shè)置Filed集合,取出數(shù)據(jù):this.Fields.Add("money1");this.Fields.Add("money2");this.Fields.Add("money3");this.Fields.Add("shopname");this.GetReportData();//取數(shù)據(jù)并作轉(zhuǎn)換設(shè)置一個(gè)標(biāo)記來表示是否顯示到了最后一條記錄:intindex=0;在FetchData事件中顯示Sales集合中的數(shù)據(jù):if(index==sales.Count)//如果到了最后一條記錄,就跳出{eArgs.EOF=true;return;}else{eArgs.EOF=false;}Sales=(Sale)sales[index];this.Fields["shopname"].Value=s.shopname;this.Fields["money1"].Value=s.money1;this.Fields["money2"].Value=s.money2;this.Fields["money3"].Value=s.money3;index+=1;按照上面的步驟,主要的代碼都完成了,當(dāng)然要在窗體上顯示,還要加一個(gè)Viewer,然后指定加載的報(bào)表:ActiveReports1rpt=newActiveReports1();rpt.Run();this.viewer1.Document=rpt.Document;如果你不滿意顯示的效果,可以給報(bào)表加上線框,讓其顯示成表格總結(jié):例子中的代碼有重復(fù),但是為了說明轉(zhuǎn)換的過程,沒有作優(yōu)化,另外,也可以看到,代碼中使用了ArrayList,出現(xiàn)了裝箱,拆箱的動(dòng)作,所以性能還有優(yōu)化的空間。從表數(shù)據(jù)到顯示用數(shù)據(jù)的轉(zhuǎn)換可以在Sql中作,但是業(yè)務(wù)邏輯較復(fù)雜的時(shí)候,Sql就顯得力不從心,例如,顯示每月的數(shù)據(jù),而且還有收入,支出,如果再加上稅收,折扣,損耗,租金,和上年同期的比較等等無法預(yù)測(cè)的業(yè)務(wù)邏輯,如果把SQL寫在代碼中,調(diào)試成問題,如果寫成存儲(chǔ)過程,有破壞了封裝。所以相比之下,在代碼中進(jìn)行的轉(zhuǎn)換工作雖然較復(fù)雜,但是還是具有靈活的優(yōu)勢(shì)的。使用ActiveR進(jìn)行報(bào)表開發(fā)(六)--導(dǎo)出報(bào)表ActiveReport提供了多種文件格式的導(dǎo)出,包括:Html,Pdf,Text,Rtf,Xls,Tiff,這幾種格式中,Pdf是效果最好,因?yàn)橛辛丝逛忼X,線條和字體看起來都光滑的多,而且是完全的所見即所得,加上很多Web項(xiàng)目都采用Pdf作為報(bào)表顯示的文件格式,導(dǎo)出Pdf應(yīng)該是首選。由于是把報(bào)表直接生成了圖片,Tiff格式的導(dǎo)出也是所見即所得的。其他的文件格式的限制都比較多,每種文件格式的限制可以在ActiveReport的幫助中搜索“LimitationsinExportFormats",其中有詳細(xì)的列表。將報(bào)表導(dǎo)出的步驟也很簡(jiǎn)單,先要在工具欄上添加導(dǎo)出要用的控件,這組控件有:HtmlExport,PdfExport,RtfExport,TextExport,TiffExport,XlsExport六種。這里以PdfExport為例:拖放一個(gè)PdfExport控件到窗體上,就可以進(jìn)行導(dǎo)出操作了,代碼很簡(jiǎn)單,我們假設(shè)有一個(gè)報(bào)表文件和一個(gè)Viewer:窗體加載的時(shí)候:ActiveReports1rpt=newActiveReports1();rpt.Run();this.viewer1.Document=rpt.Document;在一個(gè)Button的Click中:this.pdfExport1.Export(this.viewer1.Document,@"z:\123.pdf");很簡(jiǎn)單吧,其他格式的導(dǎo)出也一樣,例如Excel格式:this.xlsExport1.Export(this.viewer1.Document,@"z:\123.xls");在生成Pdf的時(shí)候要注意,有時(shí)頁(yè)面設(shè)置不當(dāng),控件的大小可能會(huì)超出范圍,導(dǎo)致報(bào)表有一部分無法打印出來,在使用AcrobatReader預(yù)覽的時(shí)候,要在Print窗口,通過調(diào)整PageScaling為None,看看右邊Preview部分,有沒有發(fā)生超出打印范圍的情況。另外在作表格的時(shí)候要放大后看,因?yàn)榻?jīng)常會(huì)出現(xiàn)線條沒有對(duì)齊或完全連接的情況,在預(yù)覽的時(shí)候看不出來,但是在打印后會(huì)看到線條錯(cuò)位等情況。進(jìn)行報(bào)表開發(fā)(七)使用ActiveR進(jìn)行報(bào)表開發(fā)(七)--事件上篇隨筆介紹了在ActievReport中導(dǎo)出報(bào)表,本篇隨筆簡(jiǎn)單介紹ActiveReport中的重要事件。只觸發(fā)一次的事件:ReportStart:在報(bào)表啟動(dòng)時(shí)觸發(fā)。該事件在Datalnitialize之前,在這里可以整個(gè)報(bào)表都要用到的對(duì)象或變量作初始化,也可以設(shè)置子報(bào)表。DataInitialize:這個(gè)事件在前面的幾篇隨筆中經(jīng)常出現(xiàn),經(jīng)常在這里取數(shù)據(jù),綁定數(shù)據(jù)源,設(shè)置報(bào)表的Fileds屬性等。ReportEnd:在報(bào)表加載完成后觸發(fā)。多次觸發(fā)的事件:FetchData:在處理每一條數(shù)據(jù)時(shí)都會(huì)觸發(fā),如果是采用綁定數(shù)據(jù)源的方式,就不需要再作對(duì)Fields中每個(gè)Field的Value賦值。如果是從自定義的對(duì)象集合中提取數(shù)據(jù),就要在這里給Fields賦值。而且,使用自定義集合的時(shí)候要自己設(shè)置事件的eArgs參數(shù)的EOF屬性,該屬性用來判斷是否顯示到了最后一條記錄,如果是,就設(shè)置為true,并且直接返回。具體的代碼可以參看以前的隨筆。PageStart:在報(bào)表的每頁(yè)生成的時(shí)候觸發(fā),在這里作針對(duì)每個(gè)頁(yè)的處理,最常見的就是顯示頁(yè)碼。PageEnd:在報(bào)表的每也生成完成的時(shí)候觸發(fā)。區(qū)域的事件:每個(gè)區(qū)域(PageHeader,Detail,PageFooter)都有Format,BeforePrint和AfterPrint事件。最好不要在這幾個(gè)事件中操作報(bào)表的Fields集合,而應(yīng)該在DataInitialize和FetchData中進(jìn)行。Format:在數(shù)據(jù)加載并綁定后觸發(fā),只有在這里才可以設(shè)置某個(gè)區(qū)域的高度。BeforePrint:在區(qū)域被生成前觸發(fā),在這里如果設(shè)置區(qū)域的高度是不會(huì)有效果的,而且不要在這里操作數(shù)據(jù)源。AfterPrint:在區(qū)域已經(jīng)被生成并描畫出后發(fā)生,可以在該事件里直接在畫布上進(jìn)行描畫操作。使用ActiveR進(jìn)行報(bào)表開發(fā)(八)--顯示合計(jì)在報(bào)表開發(fā)中我們常常要顯示合計(jì),比如銷售記錄,要顯示單價(jià),售出件數(shù),合計(jì)金額等。我們可以在從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)的時(shí)候就使用SQL來產(chǎn)生一個(gè)合計(jì)字段,也可以在ActiveReport中進(jìn)行,有兩種方法可以使用。使用ActiveReport中的Label或TextBox控件的DataField屬性。例如,要使一個(gè)TextBox顯示合計(jì),它的值是由單價(jià)和售出件數(shù)的乘積。設(shè)置TextBox的DataField值為“=單價(jià)*售出件數(shù)”。然后編寫代碼,加載數(shù)據(jù),設(shè)置Field集合,然后在FetchData事件中給Field賦值,就可以完成了,例如:this.Fields["ProductName"].Value=ductName;this.Fields["UnitPrice"].Value=row.unitPrice;this.Fields["Quantity"].Value=row.quantity;不對(duì)DataField屬性使用表達(dá)式,而是直接在FetchData中進(jìn)行計(jì)算,例如:doublequantity=Convert.ToDouble(this.Fields["Quantity"].Value);doubleunitPrice=Convert.ToDouble(this.Fields["UnitPrice"].Value);this.Fields["ExtendedPrice"].Value=quantity*unitPrice;當(dāng)然要在報(bào)表上顯示要設(shè)置Label或TextBox的DataField屬性為ExtendedPrice使用ActiveR進(jìn)行報(bào)表開發(fā)(九)--EndUser我們?cè)谑褂肁ctiveRepots的時(shí)候,通常都是在工程里建一個(gè).rpx文件,然后自動(dòng)會(huì)有一個(gè)對(duì)應(yīng)的代碼文件,我們就把代碼和處理邏輯寫在代碼文件里。但是,能不能脫離代碼文件,只使用.rpx文件來生成報(bào)表呢?答案是可以的,ActiveReports提供的EndUser功能可以做到這一點(diǎn)。ActiveRepots自帶的示例代碼中包括了兩個(gè)EndUser功能的例子:DiamondReports和EndUserDesigner,前者的功能齊備些,后者比較簡(jiǎn)單,但是對(duì)于學(xué)習(xí)使用EndUser功能,比較直觀,下面說說在winform和web環(huán)境下如何使用。運(yùn)行EndUserDesigner示例程序,會(huì)看到一個(gè)在VS.net中的報(bào)表設(shè)計(jì)界面非常相似的界面。有工具欄,有字段列表,有報(bào)表布局,有屬性,等。實(shí)際上最主要的兩個(gè)控件是ardMain和ardReportExplorer,ardMain就是用來顯示報(bào)表布局的,ardReportExplorer用來顯示當(dāng)前ardMain的數(shù)據(jù)源的字段列表和布局的各個(gè)部分。使用EndUser主要有兩個(gè)步驟:設(shè)定數(shù)據(jù)源,設(shè)計(jì)報(bào)表布局。設(shè)定數(shù)據(jù)源可以通過點(diǎn)擊布局部分Detail字樣前的圖標(biāo),會(huì)彈出一個(gè)對(duì)話框,在這里可以設(shè)置數(shù)據(jù)源類型,連接串,sql語(yǔ)句。完成后會(huì)在字段列表部分顯示出通過sql語(yǔ)句得到的字段,然后就可以設(shè)計(jì)報(bào)表布局了。你可以把字段列表中的某一項(xiàng)拖放到布局上,會(huì)自動(dòng)生成控件并綁定DataField。在Winform下,設(shè)計(jì)完成后就可以通過EndUserDesigner菜單上的“預(yù)覽”看到你的報(bào)表了。然后可以用SaveLayout菜單將報(bào)表保存為一個(gè).rpx文件。要在web環(huán)境下使用剛才設(shè)計(jì)的報(bào)表,步驟要復(fù)雜些:按照上面的步驟設(shè)計(jì).rpx文件。在web項(xiàng)目中包括.rpx文件。配置web.config文件,為了能在瀏覽器中直接顯示報(bào)表,需要對(duì)Web.config文件作一些設(shè)置,在system.web標(biāo)記里添加以下內(nèi)容:<httpHandlers><!--**********ActiveReportsHttpHandlerConfiguration**********--><addverb="*"path="*.rpx"type="DataDynamics.ActiveReports.Web.Handlers.RpxHandler,ActiveReports.Web,Version=052,Culture=neutral,PublicKeyToken=cc4967777c49a3ff"/><addverb="*"path="*.ActiveReport"type="DataDynamics.ActiveReports.Web.Handlers.CompiledReportHandler,ActiveReports.Web,Version=052,Culture=neutral,PublicKeyToken=cc4967777c49a3ff"/><addverb="*"path="*.ArCacheItem"type="DataDynamics.ActiveReports.Web.Handlers.WebCacheAccessHandler,ActiveReports.Web,Version=052,Culture=neutral,PublicKeyToken=cc4967777c49a3ff"/></httpHandlers>這里的Version和PublicKeyToken都必須正確,如果你不清楚,可以通過管理工具里的.netframework配置工具來查看這些屬性。在ActiveReports的文檔里說在VS2005中如果不是使用IIS就可以不用配置,在VS2003里是必須的。但是我在VS2005中,如果不加這段配置還是不行。在頁(yè)面上使用,例如:<ahref="YourReport.rpx?OutputFormat=pdf">Sample</a>注意這里傳入的參數(shù)OutputFormat二pdf,這樣會(huì)使在瀏覽器里打開報(bào)表生成的pdf文件。目前ActiveReports只支持pdf和html兩種格式,如果你使用excel或者rtf,是沒有效果的,都會(huì)按照html格式顯示。上面說了基本的操作,但是如果在sql語(yǔ)句里有參數(shù)怎么作呢?怎樣向sql語(yǔ)句傳遞值來取得指定的數(shù)據(jù)呢?首先要在sql語(yǔ)句里嵌入?yún)?shù)的表達(dá)形式,例如:Select*fromCustomersWHERECountry='<%Country%>'是不是有些像CodeSmith的代碼生成腳本?下面要作的就是傳參數(shù)值了,在web下比較簡(jiǎn)單,使用QueryString,例如,我們把Url寫成這樣:YourReport.rpx?OutputFormat二pdf&Country二China,—切就OK了。在Winform下,不用自己傳參數(shù)值,只要你在運(yùn)行報(bào)表的時(shí)候,ActiveReports會(huì)自己解析Sql語(yǔ)句,分析出有哪些參數(shù),然后會(huì)彈出一個(gè)對(duì)話框,列出參數(shù),要求你輸入值。可以看出,使用EndUser功能是很簡(jiǎn)單的,但是它一樣也有局限,就是適合較簡(jiǎn)單的業(yè)務(wù),雖然設(shè)計(jì)一個(gè)報(bào)表很簡(jiǎn)單,甚至可以把一部分工作交給客戶自己完成,但是不要指望客戶能作多么復(fù)雜的東西,客戶寧可打個(gè)電話要求開發(fā)者幫忙義務(wù)勞動(dòng)下,維護(hù)的工作量最終還是在程序員身上。使用ActiveR進(jìn)行報(bào)表開發(fā)(十)--交叉變換背景在報(bào)表中使每條記錄按照不同的背景色顯示能夠增加報(bào)表的美觀,數(shù)據(jù)的顯示更清晰,這樣的效果在報(bào)表開發(fā)中是很常見的,在ActiveReports中要實(shí)現(xiàn)起來也很簡(jiǎn)單的。可以像幫助里的例子一樣:boolchangeColor=false;privatevoidDetail_Format(objectsender,System.EventArgseArgs){if(changeColor){changeColor=false;this.Detail.BackColor=System.Drawing.Color.DarkOrange;}else{this.Detail.BackColor=System.Drawing.Color.Transparent;changeColor=true;}}也可以在每條記錄的下面放一個(gè)Shape,設(shè)置其不顯示邊框,將其置于最后面,然后按照上面的代碼方式設(shè)置這個(gè)Shape的顏色。使用ActiveR進(jìn)行報(bào)表開發(fā)(十一)--遷移到3.0在這里先介紹下ActiveReports。ActiveReports是.net下出色的報(bào)表開發(fā)工具,我最喜歡它的地方就是提供了單獨(dú)的代碼文件,你能夠操作數(shù)據(jù)源,也可以控制報(bào)表的顯示等等,很靈活。但是可能由于宣傳不足,國(guó)內(nèi)用的比較少,這兩天用上了最新的ActiveR3.0,發(fā)現(xiàn)比起2.0,變化是比較大的,要從2.0遷移到3.0,還要費(fèi)一點(diǎn)功夫。下面說說升級(jí)后的主要區(qū)別和要注意的幾個(gè)地方,其中包含了一些朋友在本系列前面的隨筆的評(píng)論中提到的問題。安裝:我的安裝過程可謂是一波三折。先卸載掉了2.0,安裝3.0后發(fā)現(xiàn)VS2005每次啟動(dòng)后都提示“包加載錯(cuò)誤”,要求使用“devenv/resetskippkgs”重新加載的提示。所有的窗體都無法打開設(shè)計(jì)器,而且給項(xiàng)目添加新項(xiàng)的時(shí)候也沒有顯示ActiveReports的文件。根據(jù)提示在網(wǎng)上搜了一遍,按照微軟提供的資料也無法解決,無奈之下只好修復(fù)VS2005,完成后窗體設(shè)計(jì)器可以打開了,這才松了口氣,重新安裝ActiveReports,這次沒有出現(xiàn)什么問題,一次0K。安裝完了,第一件事就是打開幫助看看有什么新的變化,但是很不幸,幫助無法打開,只好又執(zhí)行了一次幫助安裝目錄下的H2Reg.exe/r,才把幫助搞

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論