Crystal Report.net Web報表開發(fā)日記(二)
2024-07-10 13:03:43
供稿:網(wǎng)友
使用crystal report.net進行開發(fā)的一些預備知識:
執(zhí)行模式
水晶報表取數(shù)據(jù)可以使用下面的方法實現(xiàn):
pull 模式:
被請求時,水晶報表直接根據(jù)指定的驅(qū)動連接數(shù)據(jù)庫然后組裝這些數(shù)據(jù)。
push 模式 :
此時開發(fā)表不得不自己編寫代碼連接數(shù)據(jù)并組裝dataset,同時將它傳送至報表。在些這種情況下,通過使用連接共享以及限制記錄集合的大小,可以使用報表性能最大化。
報表類型:
水晶報表設(shè)計器能夠直接包含報表至工程也能夠使用獨立的報表對象。
strongly-typed 報表 :
當你將報表文件加入到項目中去時,它就變成了一個了“ strongly-typed“報表。在這些情況下,你將擁有直接創(chuàng)建報表的對象的權(quán)力,這將減少一些代碼并且能夠提供一些性能。
un-typed 報表 :
這里的報表并不直接包含在項目中,因此稱為‘un-typed’ 報表。在這種情況下,你不得不使用水晶報表的”reportdocuemt“對象建立一個實例,并且”手動“地凋用報表。
其它注意事項
盡管水晶報表查看器擁有一些很酷的功能,如縮放、頁面導航等。但是他不提供打印功能,你不得不調(diào)用游覽器的打印功能。
vs.net中的水晶報表如果沒有注冊,那么它只能使用30次,30次后,”保存“功能就不能再使用了。為了避免這個,你不是不在 http://www.crystaldecisions.com/這里注冊此產(chǎn)品。 (好像不是這樣子的,不注冊也好像能用很長的時間,只是不能提供支持)
默認安裝的水晶報表只能支持5個用戶,為了支持更多的用戶,你不得不在 http://www.crystaldecisions.com/中購買許可證。
我在實際開發(fā)應(yīng)用中使用的是push 模式 : , 因為一般表格模式比較簡單,在上完全可以用其他方式替代,因此,我使用的是實際開發(fā)中的圖形報表做為例子。
開發(fā)步驟如下:
1、在項目中創(chuàng)建一個數(shù)據(jù)集,然后右鍵->選擇“新建element”,element的名稱就是數(shù)據(jù)表的名稱。
數(shù)據(jù)集名稱暫時定為:reportdata,element相當于一個數(shù)據(jù)表,名稱暫定為:datatable,下一步是給element
增加字段,也就是我們報表中要使用的數(shù)據(jù)。注意字段類型。
2、繪制一個空的crystal report的報表文件(*.rpt),然后,在報表繪制界面上右鍵->選擇“數(shù)據(jù)庫->添加/刪除數(shù)據(jù)庫”打開“數(shù)據(jù)庫專家”,選擇“項目數(shù)據(jù)->ado.net數(shù)據(jù)集”,你會看到剛才創(chuàng)建的element數(shù)據(jù)集reportdata,選用datatable做為報表數(shù)據(jù)。下一步,通過報表專家插入“圖表”,使用datatable中的數(shù)據(jù)字段
來生成報表的數(shù)據(jù)。
3、創(chuàng)建一個web窗體,在窗體上放一個crystalreportviewer控件!寫代碼獲取填充一個定義的數(shù)據(jù)集dataset,然后,生成一個“報表文件的對象”,把該對象的數(shù)據(jù)源指向已經(jīng)填充數(shù)據(jù)的dataset,對crystalreportviewer控件的reportsource屬性賦值等于生成的“報表文件的對象”,crystalreportviewer控件的visible屬性設(shè)置為true ;
代碼注意事項:
1、dataset中填充數(shù)據(jù)的表的名稱必須和原來定義的element一致,否則報表出來會是空白
2、用于填充dataset數(shù)據(jù)表的字段也要和element定義的字段屬性,名稱一致!
比如:
element中定義字段有兩個:entryname string, entrysales decimal
填充dataset的sql語句,
select b.item_name as entryname ,sum(a.expend_money) as entrysales from t_ware_sales .......
完成以上3個步驟,你就可以在ie上看到你的web圖形報表了,其實就是crystal生成的一張圖片!
大功告成!
下一個章節(jié),我將用自己的代碼來詳細說明整個過程。不過要是熟悉.net開發(fā)的按照我在本章節(jié)所描述的內(nèi)容,應(yīng)該已經(jīng)沒問題了!