玩轉SSRS第十篇---自定義代碼


提到SSRS 那么就不得不提一下自定義代碼的功能,通過自定義代碼,有時候可以解決一些比較復雜的問題,比如將讓指定的數據行應用指定的屬性值。此篇將演示如何通過簡單結構的自定義代碼進行報表樣式的基本設計。

注:此篇雖然演示的是RDLC報表,但是在RDL報表中自定義代碼這部分是通用的,沒有任何區別。(不得不說我更願意用RDLC報表這種通過代碼提供數據源的方式,雖然有些麻煩但在數據的組織上要更靈活一些。)

首先新建一個ASP.NET WebForm項目,建立一個類文件,里面包含一個DateItem類作為數據容器,此外增加一個DataProvider類提供RDLC報表數據源。

然后創建一個測試asp.net頁面承載Report Viewer控件,最后創建一個rdlc報表頁面。

最終解決方案目錄如下所示:

在asp.net頁面中依次放入scriptmanager控件以及ReportViewer控件。

打開rdlc文件,添加數據源,然后按如下設計報表:

在數據源提供者的方法中,加入一些測試數據。

關於創建RDLC報表以及通過代碼為報表提供數據源的詳細方式,可以參考我的這篇隨筆

瀏覽項目,可以看到報表最初默認的效果。

接下來為報表添加自定義代碼豐富這張報表,方法是右鍵點擊報表空白區域,然后點擊Report Properties…

在Report Properties界面中,點擊Code,在右邊的Customer Code輸入自定義代碼。

添加如下代碼:

 

Public Function ROWDESC(ROWHEADER AS String) AS String

SELECT CASE ROWHEADER

CASE "M": Return "餐費"

CASE "M1": Return "早餐"

CASE "M2": Return "午餐"

CASE "M3": Return "晚餐"

CASE "L": Return "市場"

CASE "L1": Return "蔬菜"

CASE "L2": Return "肉類"

CASE "L3": Return "水果"

CASE "T": Return "交通"

CASE "T1": Return "地鐵"

CASE "T2": Return "公交"

CASE "T3": Return "火車"

CASE "T4": Return "飛機"

END SELECT

END Function

 

這段代碼的結構不是很復雜,相信有編程基礎的朋友看過一遍就知道是什么意思了。代碼主要是SWITCH CASE結構,根據傳遞進來的Title不同而顯示不同的行頭。

然后右鍵點擊報表內容的行頭,點擊菜單中的Expression…

在表達式界面中輸入如下代碼:

在屬性中應用代碼的方式就是=Code.方法名。

瀏覽報表,可以看到報表內容的行頭已經根據代碼發生了變化。

接下來對報表的邊框進行一下特殊的邊框設置,比如下面的效果,行頭是帶有上下邊框的,以及匯總行也是帶有上下邊框的。

這個效果常規方法很難設計出來,但是通過自定義代碼就可以輕松搞定。

再為報表添加如下代碼:

 

Public Function UPBORDER(ROWHEADER AS String) AS String

SELECT CASE ROWHEADER

CASE "M": Return "Solid"

CASE "L": Return "Solid"

CASE "T": Return "Solid"

END SELECT

END Function

 

Public Function DOWNBORDER(ROWHEADER AS String) AS String

SELECT CASE ROWHEADER

CASE "M": Return "Solid"

CASE "L": Return "Solid"

CASE "T": Return "Solid"

CASE "T4": Return "Solid"

END SELECT

END Function

 

同樣也是簡單的SWITCH CASE結構,這些代碼一個是設置行頂邊框的,一個是設置行底邊框的,通過判斷其Title的屬性來決定是否有上邊框和下邊框。

選中報表內容行,在屬性中找到BorderStyle屬性集,依次找到Top和 Bottom進行如下設置:

這樣就實現了特殊邊框的效果。

有時候我們希望匯總行的字體是加粗的,這個也很容易。首先添加下面的代碼。

 

Public Function ISBOLD(ROWHEADER AS String) AS String

SELECT CASE ROWHEADER

CASE "M": Return "Bold"

CASE "L": Return "Bold"

CASE "T": Return "Bold"

END SELECT

END Function

 

然后將這個代碼應用到FontStyle屬性中。

瀏覽報表,可以看到如下效果:

 

至此,你可以看到通過自定義代碼,一些復雜樣式的實現就相對容易一些,靈活運用自定義代碼,將起到事半功倍的效果,尤其是根據不同的數據行套用不同的樣式。

不得不所報表的自定義代碼編寫起來比編寫Javascript還要痛苦,因為它基本上就是一個文本編輯器,沒有任何智能感知等輔助代碼的功能,所以在編寫的時候需要不斷去嘗試和測試。但總體來說通過自定義代碼實現復雜的功能確實要清晰和容易很多。希望RS的下一個版本可以對此功能進行改進。

 

示例代碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM