天天看點

ASP.NET中水晶報表的使用

在我們對vs.net中的水晶報表(crystalreports)進行研究之前,我和我朋友對如何将這個複雜的東東加入我們的web應用有着非常的好奇心。一周以後,在閱讀了大量的“howto”文檔之後,我們成功地将一些簡單的報告加入到了我們的asp.net程式中,并得到了一些小決竅。

這篇文章教你如何在.netweb應用中使用水晶報表,也可以讓你在學習過程中少走一些彎路。為了得到最好的效果,讀者最好需要有一些基礎的asp.net通路資料庫的知識以及使用vs.net的開發經驗。

簡介

水晶報表可以由很多的方法得到,其中一個就是使用vs.net來建立,它提供了非常豐富模型以使我們能夠在運作時操作屬性和方法。如果你正在使用vs.net開發.net程式,那麼你就不需要再安裝其它軟體了,因為他已經内嵌在vs.net中了。

優點:

vs.net水晶報表有下面一些主要的優點:

快速的報表開發

能夠導出成為複雜的互動性圖表

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

能夠動态地将報表導出成為.pdf,.doc,xls,html,rtf等多種格式

結構:

一些元件組成了水晶報表的二層結構,需要的web應用有:

用戶端:

用戶端僅需要一個可以通路嵌入aspx頁面報表的遊覽器就可以了

伺服器:

水晶報表引擎(crystalreportengine(crengine.dll))

通過它可以完成一些任務,如在報告檔案中合并資料,轉換報告為其它格式等。也正是因為報告引擎的作用,才可以将asp.net中的水晶報表轉換成為普通html格式

水晶報表設計器(crystalreportdesigner(crdesigner.dll))

水晶報表就是在設計器中建立的,在設計器中你可以設計标題,插入資料,公式,圖表,子報表等。

.rpt報表檔案

執行報表中的第一步就是在水晶報表設計器接口建立此報表,在預設安裝中微軟已經提供了一些現成的.rpt例子。

datasource

.rpt檔案取得資料庫的方法取決于你方法的選擇,你能選擇讓水晶報表自己選擇資料而不使用任何代碼或者也可以選擇手動的組裝dataset,然後再将其傳送到報表檔案。

水晶報表檢視控件(crystalreportviewerwebformcontrol(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/中購買許可證。

讓我們感受一下----在asp.net中使用一個現成的水晶報表檔案

讓我們先感受一下在webform中使用水晶報表的感覺。

1)從webform工具欄中拖動水晶報表檢視器控件(crystalreportviewer)至.aspx頁面中。

4)從左邊的"bindable屬性”區中選擇“reportsource”

5)選中"自定義綁定表達式"單選按鈕,在右邊的底部的視窗中指定.rpt檔案的檔案名和路徑,例如:"c://programfiles//microsoftvisualstudio.net//crystalreports//samples//reports//generalbusiness//worldsalesreport.rpt",然後”确定“

以及:<cr:crystalreportviewer>

id="crystalreportviewer1"

runat="server"width="350px"height="50px"

reportsource='<%#"c://programfiles//microsoftvisualstudio.net//crystalreports//samples//reports//generalbusiness//worldsalesreport.rpt"%>'>

</cr:crystalreportviewer>

注意:在飛刀我的vs.net正式版中自動生成的代碼中reportsource産生的樣式不是這樣子的,它是:reportsource="<%#c:/xxxxx/xxx.rpt%>"

這樣是錯誤的,會出現錯誤資訊,有兩處錯誤:

databind中要有雙引号,是以外部隻能用單引号

目錄分隔符号不能使用"/",必須使用"//"

必須按照使用本文介紹的格式來手動修改,這也算是vs.net的一個bug吧。

6)在page_load方法中調用databind方法。(代碼為vb.net)

privatesubpage_load(byvalsenderassystem.object,byvaleassystem.eventargs)

databind()

endsub

7)儲存并編譯你的頁面。現在,你就有一個内嵌水晶報表的webform頁面了。

注意:實際開發中,一開始會出現無法通路inetsrv目錄的錯誤,解決的辦法是改變其目錄的安全屬性,使user使用者有可寫的權限。飛刀我發現.net系統自已給出的解決方法是沒有用的,也可能是我使用的是windows.net作業系統的原因。