明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

ASP.NET中水晶報(bào)表的使用

[摘要]在我們對(duì)VS.Net中的水晶報(bào)表(Crystal Reports)進(jìn)行研究之前,我和我朋友對(duì)如何將這個(gè)復(fù)雜的東東加入我們的Web應(yīng)用有著非常的好奇心。一周以后,在閱讀了大量的“HOWTO”文檔之后,我們成功地將一些簡(jiǎn)單的報(bào)告加入到了我們的Asp.net程序中,并得到了一些小決竅。   這篇文章教你...

在我們對(duì)VS.Net中的水晶報(bào)表(Crystal Reports)進(jìn)行研究之前,我和我朋友對(duì)如何將這個(gè)復(fù)雜的東東加入我們的Web應(yīng)用有著非常的好奇心。一周以后,在閱讀了大量的“HOWTO”文檔之后,我們成功地將一些簡(jiǎn)單的報(bào)告加入到了我們的Asp.net程序中,并得到了一些小決竅。
  這篇文章教你如何在.Net Web應(yīng)用中使用水晶報(bào)表,也可以讓你在學(xué)習(xí)過(guò)程中少走一些彎路。為了得到最好的效果,讀者最好需要有一些基礎(chǔ)的Asp.Net訪問(wèn)數(shù)據(jù)庫(kù)的知識(shí)以及使用VS.Net的開(kāi)發(fā)經(jīng)驗(yàn)。
  簡(jiǎn)介
  水晶報(bào)表可以由很多的方法得到,其中一個(gè)就是使用VS.Net來(lái)創(chuàng)建,它提供了非常豐富模型以使我們能夠在運(yùn)行時(shí)操作屬性和方法。如果你正在使用VS.Net開(kāi)發(fā).Net程序,那么你就不需要再安裝其它軟件了,因?yàn)樗呀?jīng)內(nèi)嵌在VS.Net中了。
  優(yōu)點(diǎn):
  VS.Net水晶報(bào)表有下面一些主要的優(yōu)點(diǎn):


快速的報(bào)表開(kāi)發(fā)

能夠?qū)С龀蔀閺?fù)雜的交互性圖表

可以與其它控件一起在WebForm中使用

能夠動(dòng)態(tài)地將報(bào)表導(dǎo)出成為.pdf,.doc,xls,html,rtf等多種格式  

  結(jié)構(gòu):
  一些組件組成了水晶報(bào)表的二層結(jié)構(gòu),需要的Web應(yīng)用有:
  客戶端 :
  客戶端僅需要一個(gè)可以訪問(wèn)嵌入aspx頁(yè)面報(bào)表的游覽器就可以了
  服務(wù)器 :
    水晶報(bào)表引擎(Crystal Report Engine (CREngine.dll))
  通過(guò)它可以完成一些任務(wù),如在報(bào)告文件中合并數(shù)據(jù),轉(zhuǎn)換報(bào)告為其它格式等。也正是因?yàn)閳?bào)告引擎的作用,才可以將Asp.Net中的水晶報(bào)表轉(zhuǎn)換成為普通HTML格式
  水晶報(bào)表設(shè)計(jì)器(Crystal Report Designer (CRDesigner.dll))
  水晶報(bào)表就是在設(shè)計(jì)器中創(chuàng)建的,在設(shè)計(jì)器中你可以設(shè)計(jì)標(biāo)題,插入數(shù)據(jù),公式,圖表,子報(bào)表等。
    .rpt報(bào)表文件
  執(zhí)行報(bào)表中的第一步就是在水晶報(bào)表設(shè)計(jì)器接口創(chuàng)建此報(bào)表,在默認(rèn)安裝中微軟已經(jīng)提供了一些現(xiàn)成的.rpt例子。
    Data Source
    .rpt文件取得數(shù)據(jù)庫(kù)的方法取決于你方法的選擇,你能選擇讓水晶報(bào)表自己選擇數(shù)據(jù)而不使用任何代碼或者也可以選擇手動(dòng)的組裝DataSet,然后再將其傳送到報(bào)表文件。
  水晶報(bào)表查看控件(Crystal Report Viewer web form Control (CRWebFormViewer.dll))
  水晶報(bào)表查看控件是一個(gè)WebForm控件,可以將它看成是一個(gè)在.aspx頁(yè)面中存放報(bào)表的容器。  注意:在一些復(fù)雜的操作中,報(bào)表服務(wù)器與Web服務(wù)器可能不在同一物理主機(jī)上,Web服務(wù)器將HTTP請(qǐng)求傳送到報(bào)表服務(wù)器上去。水晶報(bào)表也可以當(dāng)做WebService來(lái)執(zhí)行。
  執(zhí)行模式
  水晶報(bào)表取數(shù)據(jù)可以使用下面的方法實(shí)現(xiàn):
  Pull 模式:
  被請(qǐng)求時(shí),水晶報(bào)表直接根據(jù)指定的驅(qū)動(dòng)連接數(shù)據(jù)庫(kù)然后組裝這些數(shù)據(jù)。
  Push 模式 :
  此時(shí)開(kāi)發(fā)表不得不自己編寫代碼連接數(shù)據(jù)并組裝DataSet,同時(shí)將它傳送至報(bào)表。在些這種情況下,通過(guò)使用連接共享以及限制記錄集合的大小,可以使用報(bào)表性能最大化。
     報(bào)表類型:
  水晶報(bào)表設(shè)計(jì)器能夠直接包含報(bào)表至工程也能夠使用獨(dú)立的報(bào)表對(duì)象。
  Strongly-typed 報(bào)表 :
  當(dāng)你將報(bào)表文件加入到項(xiàng)目中去時(shí),它就變成了一個(gè)了“ strongly-typed“報(bào)表。在這些情況下,你將擁有直接創(chuàng)建報(bào)表的對(duì)象的權(quán)力,這將減少一些代碼并且能夠提供一些性能。
  Un-Typed 報(bào)表 :
  這里的報(bào)表并不直接包含在項(xiàng)目中,因此稱為‘un-typed’ 報(bào)表。在這種情況下,你不得不使用水晶報(bào)表的”ReportDocuemt“對(duì)象建立一個(gè)實(shí)例,并且”手動(dòng)“地凋用報(bào)表。
    其它注意事項(xiàng)
  盡管水晶報(bào)表查看器擁有一些很酷的功能,如縮放、頁(yè)面導(dǎo)航等。但是他不提供打印功能,你不得不調(diào)用游覽器的打印功能。
  VS.Net中的水晶報(bào)表如果沒(méi)有注冊(cè),那么它只能使用30次,30次后,”保存“功能就不能再使用了。為了避免這個(gè),你不是不在 http://www.crystaldecisions.com/這里注冊(cè)此產(chǎn)品。 (好像不是這樣子的,不注冊(cè)也好像能用很長(zhǎng)的時(shí)間,只是不能提供支持)
  默認(rèn)安裝的水晶報(bào)表只能支持5個(gè)用戶,為了支持更多的用戶,你不得不在 http://www.crystaldecisions.com/中購(gòu)買許可證。
讓我們感受一下----在Asp.net中使用一個(gè)現(xiàn)成的水晶報(bào)表文件

  讓我們先感受一下在WebForm中使用水晶報(bào)表的感覺(jué)。   
1) 從WebForm工具欄中拖動(dòng)水晶報(bào)表查看器控件(Crystal Report Viewer)至.aspx頁(yè)面中。

  

  2) 調(diào)出水晶報(bào)表查看器控件的屬性窗口  
  3) 點(diǎn)擊[...]按鈕查看"Data Binding"屬性,并彈出了DataBinding窗口。
  4)  從左邊的"Bindable屬性”區(qū)中選擇“Report Source”
  5) 選中"自定義綁定表達(dá)式"單選按鈕,在右邊的底部的窗口中指定.rpt文件的文件名和路徑,例如:"C:\\Program Files\\Microsoft Visual Studio.NET\\Crystal Reports\\Samples\\Reports\\General Business\\World Sales Report.rpt",然后”確定“
   

  注意:文件”World Sales Report.rpt“文件是在VS.Net安裝時(shí)創(chuàng)建的。如果你在安裝過(guò)程中指定了其它目錄,此時(shí)你最好確認(rèn)一下路徑的正確性。
  上面的步驟中實(shí)際上是插入了下面這些代碼至Asp.Net文件中: <%@ Register TagPrefix="cr" Namespace="CrystalDecisions.Web" Assembly="CrystalDecisions.Web" %>


  以及: <CR:CRYSTALREPORTVIEWER>
   id="CrystalReportViewer1"
   runat="server" Width="350px" Height="50px"
   ReportSource=' <%# "C:\\Program Files\\Microsoft Visual Studio.NET\\Crystal Reports\\Samples\\Reports\\General Business\\World Sales Report.rpt" %>'>
  </CR:CRYSTALREPORTVIEWER>


   注意:在飛刀我的VS.Net正式版中自動(dòng)生成的代碼中ReportSource產(chǎn)生的樣式不是這樣子的,它是: ReportSource=" <%# C:\xxxxx\xxx.rpt %>" 


  這樣是錯(cuò)誤的,會(huì)出現(xiàn)錯(cuò)誤信息,有兩處錯(cuò)誤:
DataBind中要有雙引號(hào),因此外部只能用單引號(hào)
目錄分隔符號(hào)不能使用"\",必須使用"\\"

  必須按照使用本文介紹的格式來(lái)手動(dòng)修改,這也算是VS.Net的一個(gè)Bug吧。
  6) 在Page_Load方法中調(diào)用DataBind方法。(代碼為VB.Net)


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
DataBind()
End Sub 


  7)保存并編譯你的頁(yè)面。 現(xiàn)在,你就有一個(gè)內(nèi)嵌水晶報(bào)表的WebForm頁(yè)面了。
  注意:實(shí)際開(kāi)發(fā)中,一開(kāi)始會(huì)出現(xiàn)無(wú)法訪問(wèn)inetsrv目錄的錯(cuò)誤,解決的辦法是改變其目錄的安全屬性,使User用戶有可寫的權(quán)限。飛刀我發(fā)現(xiàn).Net系統(tǒng)自已給出的解決方法是沒(méi)有用的,也可能是我使用的是Windows.Net操作系統(tǒng)的原因。