在我們對VS.Net中的水晶報表(Crystal Reports)進行研究之前,我和我朋友對如何將這個複雜的東東加入我們的Web應用有著非常的好奇心。一周以後,在閱讀了大量的“HOWTO”文檔之後,我們成功地將一些簡單的報告加入到了我們的Asp.net程式中,並得到了一些小決竅。
這篇文章教你如何在.Net Web應用中使用水晶報表,也可以讓你在學習過程中少走一些彎路。為了得到最好的效果,讀者最好需要有一些基礎的Asp.Net訪問資料庫的知識以及使用VS.Net的開發經驗。
簡介
水晶報表可以由很多的方法得到,其中一個就是使用VS.Net來建立,它提供了非常豐富模型以使我們能夠在運行時操作屬性和方法。如果你正在使用VS.Net開發.Net程式,那麼你就不需要再安裝其它軟體了,因為他已經內嵌在VS.Net中了。
優點:
VS.Net水晶報表有下面一些主要的優點:
快速的報表開發
能夠匯出成為複雜的互動性圖表
可以與其它控制項一起在WebForm中使用
能夠動態地將報表匯出成為.pdf,.doc,xls,html,rtf等多種格式
結構:
一些組件組成了水晶報表的二層結構,需要的Web應用有:
用戶端 :
用戶端僅需要一個可以訪問嵌入aspx頁面報表的遊覽器就可以了
伺服器 :
水晶報表引擎(Crystal Report Engine (CREngine.dll))
通過它可以完成一些任務,如在報告檔案中合并資料,轉換報告為其它格式等。也正是因為報告引擎的作用,才可以將Asp.Net中的水晶報錶轉換成為普通HTML格式
水晶報表設計師(Crystal Report Designer (CRDesigner.dll))
水晶報表就是在設計器中建立的,在設計器中你可以設計標題,插入資料,公式,圖表,子報表等。
.rpt報表檔案
執行報表中的第一步就是在水晶報表設計師介面建立此報表,在預設安裝中微軟已經提供了一些現成的.rpt例子。
Data Source
.rpt檔案取得資料庫的方法取決於你方法的選擇,你能選擇讓水晶報表自己選擇資料而不使用任何代碼或者也可以選擇手動的組裝DataSet,然後再將其傳送到報表檔案。
水晶報表查看控制項(Crystal Report Viewer web form Control (CRWebFormViewer.dll))
水晶報表查看控制項是一個WebForm控制項,可以將它看成是一個在.aspx頁面中存放報表的容器。 注意:在一些複雜的操作中,報表伺服器與Web伺服器可能不在同一物理主機上,Web伺服器將HTTP請求傳送到報表伺服器上去。水晶報表也可以當做WebService來執行。
執行模式
水晶報表取資料可以使用下面的方法實現:
Pull 模式:
被請求時,水晶報表直接根據指定的驅動串連資料庫然後組裝這些資料。
Push 模式 :
此時開發表不得不自己編寫代碼串連資料並組裝DataSet,同時將它傳送至報表。在些這種情況下,通過使用串連共用以及限制記錄集合的大小,可以使用報表效能最大化。
報表類型:
水晶報表設計師能夠直接包含報表至工程也能夠使用獨立的報表對象。
Strongly-typed 報表 :
當你將報表檔案加入到項目中去時,它就變成了一個了“ strongly-typed“報表。在這些情況下,你將擁有直接建立報表的對象的權力,這將減少一些代碼並且能夠提供一些效能。
Un-Typed 報表 :
這裡的報表並不直接包含在項目中,因此稱為‘un-typed’ 報表。在這種情況下,你不得不使用水晶報表的”ReportDocuemt“對象建立一個執行個體,並且”手動“地凋用報表。
其它注意事項
儘管水晶報表檢視器擁有一些很酷的功能,如縮放、頁面導航等。但是他不提供列印功能,你不得不調用遊覽器的列印功能。
VS.Net中的水晶報表如果沒有註冊,那麼它只能使用30次,30次後,”儲存“功能就不能再使用了。為了避免這個,你不是不在 http://www.crystaldecisions.com/這裡註冊此產品。 (好像不是這樣子的,不註冊也好像能用很長的時間,只是不能提供支援)
預設安裝的水晶報表只能支援5個使用者,為了支援更多的使用者,你不得不在 http://www.crystaldecisions.com/中購買許可證。
讓我們感受一下----在Asp.net中使用一個現成的水晶報表檔案
讓我們先感受一下在WebForm中使用水晶報表的感覺。
1) 從WebForm工具列中拖動水晶報表檢視器控制項(Crystal Report Viewer)至.aspx頁面中。
2) 調出水晶報表檢視器控制項的屬性視窗
3) 點擊[...]按鈕查看"Data Binding"屬性,並彈出了DataBinding視窗。
4) 從左邊的"Bindable屬性”區中選擇“Report Source”
5) 選中"自訂綁定運算式"選項按鈕,在右邊的底部的視窗中指定.rpt檔案的檔案名稱和路徑,例如:"C:\\Program Files\\Microsoft Visual Studio.NET\\Crystal Reports\\Samples\\Reports\\General Business\\World Sales Report.rpt",然後”確定“
注意:檔案”World Sales Report.rpt“檔案是在VS.Net安裝時建立的。如果你在安裝過程中指定了其它目錄,此時你最好確認一下路徑的正確性。
上面的步驟中實際上是插入了下面這些代碼至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正式版中自動產生的程式碼中ReportSource產生的樣式不是這樣子的,它是: ReportSource=" <%# C:\xxxxx\xxx.rpt %>"
這樣是錯誤的,會出現錯誤資訊,有兩處錯誤:
DataBind中要有雙引號,因此外部只能用單引號
目錄分隔字元號不能使用"\",必須使用"\\"
必須按照使用本文介紹的格式來手動修改,這也算是VS.Net的一個Bug吧。
6) 在Page_Load方法中調用DataBind方法。(代碼為VB.Net)
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
DataBind()
End Sub
7)儲存並編譯你的頁面。 現在,你就有一個內嵌水晶報表的WebForm頁面了。
注意:實際開發中,一開始會出現無法訪問inetsrv目錄的錯誤,解決的辦法是改變其目錄的安全屬性,使User使用者有可寫的許可權。飛刀我發現.Net系統自已給出的解決方案是沒有用的,也可能是我使用的是Windows.Net作業系統的原因。