這是我之前使用REREPORTVIEWER執行RDLC的程式碼
其中VISIBLE、LocalReport.ReportPath、DataSources.Clear()、DataSources.Add與Refresh這些都會一直重複使用,所以我把它寫成一個常用的FUNCTION,並新增一個CLASS叫RdlFunction.cs,把常用到的FUNCTION都放在這一個CLASS。
建立好CLASS之後,使用這個CLASS改寫之前的程式:
其中的dtGetCustomerByCity的方法來自商業邏輯層,詳細內容在這個連結。
使用商業邏輯層與RdlFunction.cs有二個最大的好處,分別是:
管理:假設業務邏輯有改變,這時候只要改商業邏輯層就好了,其他程式不會動到。
開發:使用之前寫的FUNCITON,下次開發時可以重用,方便省時。
最後顯示報表內容。
搞定收工。
2011年7月28日 星期四
2011年7月9日 星期六
ReportViewer範例PART4-ServerReport
ReportViewer設定為ServerReport時顯示報表內容的步驟:
1.佈署報表到ReportServer上:
2.撰寫程式碼:因為是Remote mode,所以不需要準備DataTable,只要設定Report Server的URL和RDL在Report Server的路徑即可:
3.顯示報表:
2011年6月25日 星期六
ReportViewer範例PART3SubReport之二
繼上一篇ReportViewer範例PART3如何SubReport之一 製作SubReport後,接下來就是使用ReportViewer掛在Web上。就像這樣:
首先要先寫好一個METHOD給主要的報表使用,程式碼如圖:
然後再寫一個METHOD給SubreportProcessing事件用來顯示SubReport內容,程式碼如圖:
接著在Page_Load事件,把顯示報表的METHOD掛在SubreportProcessing事件上,並且要注意顯示主報表的時機,要判斷有沒有PostBack,否則顯示報表時會一直Page_Load。
最後執行程式顯示報表內容。
首先要先寫好一個METHOD給主要的報表使用,程式碼如圖:
然後再寫一個METHOD給SubreportProcessing事件用來顯示SubReport內容,程式碼如圖:
接著在Page_Load事件,把顯示報表的METHOD掛在SubreportProcessing事件上,並且要注意顯示主報表的時機,要判斷有沒有PostBack,否則顯示報表時會一直Page_Load。
最後執行程式顯示報表內容。
2011年6月20日 星期一
ReportViewe範例PART3如何SubReport之一
之前客戶有一個需求,希望能做出Master-Detail樣子的報表,又要一個群組一頁,當下我想到的就是使用SubReport。
首先在rdl的設計頁面先拉一個list
再來就是設定dataset
拉入所需的欄位到LIST,並對資料列群組的詳細資料新增一個group
刪除group下的詳細資料
刪除增加group所產生的欄位。
拉入subreport元件
對子報表原件按右鍵,選擇要顯示的子報表。
我的子報表內容如下
在來就是設定傳遞的參數。
接下來點一下群組,按一下F4,就會跳出群組的屬性頁面,在GROUP之下有一個PageBreak的屬性選為Between。
最後在修飾一下報表,加入報表表頭。
修飾完成後,就可以預覽報表內容了。
搞定收工。
首先在rdl的設計頁面先拉一個list
再來就是設定dataset
拉入所需的欄位到LIST,並對資料列群組的詳細資料新增一個group
刪除group下的詳細資料
刪除增加group所產生的欄位。
拉入subreport元件
對子報表原件按右鍵,選擇要顯示的子報表。
我的子報表內容如下
在來就是設定傳遞的參數。
接下來點一下群組,按一下F4,就會跳出群組的屬性頁面,在GROUP之下有一個PageBreak的屬性選為Between。
最後在修飾一下報表,加入報表表頭。
修飾完成後,就可以預覽報表內容了。
搞定收工。
2011年6月18日 星期六
ReportViewe範例PART2如何Drillthrough之二
繼上一篇ReportViewe範例PART2如何Drillthrough之一完成rdl後,下一個步驟為使用asp.NET把rdl掛在web網頁上。
改完後就放入vs2010中。
我在這個網站找到給table使用的css,看起來效果還不錯。
第三個步驟就是去獲得rdlc要的資料,第一層和要做Drillthrough的讀取資料都要寫在這邊,這部份我把它寫成一個class,也就是三層架構的商業邏輯層(因為我是參考大陸工程師的想法,事實上我覺得這個class比較像資料存取層)。
有了資料來源後,就是要把資料跟rdlc做結合。
第四個步驟就是要結合資料跟rdlc並且把它顯示出來。
這部份我自幾寫了一個class,以簡化在codebehind寫的程式。
上面的部份是給第一層報表使用的,而下面的部份則是要給Drillthrough的報表使用的。差別在於第一個報表參數的類型。
這個部份我使用overload的技巧來簡化我的程式。
string city = localReport.OriginalParametersToDrillthrough[0].Values[0].ToString();
完成第五個步驟後,就可以執行程式。
執行的結果為下圖:
我們看到桃園縣的筆數是六筆,如果我們想要知道是哪六筆,可以接著點一下桃園縣就會顯示出桃園縣六筆客戶的清單了。
第一個步驟就是把rdl轉成rdlc。
在BIDS中只要把副檔名從rdl改成rdlc即可。改完後就放入vs2010中。
第二個步驟就是拉畫面,拉一個reportviewer、button、textbox與scriptmananger。
如果嫌畫面太醜,可以利用table來排版以及使用css來美化你的頁面。我在這個網站找到給table使用的css,看起來效果還不錯。
第三個步驟就是去獲得rdlc要的資料,第一層和要做Drillthrough的讀取資料都要寫在這邊,這部份我把它寫成一個class,也就是三層架構的商業邏輯層(因為我是參考大陸工程師的想法,事實上我覺得這個class比較像資料存取層)。
有了資料來源後,就是要把資料跟rdlc做結合。
第四個步驟就是要結合資料跟rdlc並且把它顯示出來。
這部份我自幾寫了一個class,以簡化在codebehind寫的程式。
上面的部份是給第一層報表使用的,而下面的部份則是要給Drillthrough的報表使用的。差別在於第一個報表參數的類型。
這個部份我使用overload的技巧來簡化我的程式。
第五個步驟就是在codebehind寫的顯示報表的程式,重點在於要設定Drillthrough的事件,並在Drillthrough的事件中加上Drillthrough時要顯示報表的方法。
在Drillthrough事件中要記得指定傳遞的參數。
程式碼如下:string city = localReport.OriginalParametersToDrillthrough[0].Values[0].ToString();
完成第五個步驟後,就可以執行程式。
執行的結果為下圖:
我們看到桃園縣的筆數是六筆,如果我們想要知道是哪六筆,可以接著點一下桃園縣就會顯示出桃園縣六筆客戶的清單了。
2011年6月12日 星期日
ReportViewe範例Part1
會寫這篇文章是因為工作常用到ReportViewe與RDLC,但是網路上有關ReportViewe與RDLC的範例其實不多,剛開始學的時候只能看國外的BLOG,有點辛苦,所以我決定我要寫一系列的文章,我的初衷是希望能對新手有幫助,如有錯誤或可改善的地方也請大家踴躍給予意見。
因為我使用的版本是VS2010,RDLC在VS2010要搭配SCRIPTMANAGER一起使用,否則會出現報表檢視器 Web 控制項需要 Web Form 上的 System.Web.UI.ScriptManager的錯誤訊息。
所以在顯示的網頁上必須至少要拉REPORTVIER和ScriptManager這兩個物件。
拉出來畫面如下
圖中我多拉了一個button來作為顯示報表的用途,拉好畫面後,接下來就是準備RDLC,RDLC可以在BIDS上面先設計好,在BIDS上面設計好的檔名為RDL,RDL可以瀏覽報表內容,設計好後,只要把副檔名修改為 RDLC就可以使用了。
準備好RDLC後就在button點兩下開始撰寫程式。
其中GetBatchData請參考我寫的三層式架構的文章。
完成後就可以使用RDLC來瀏覽資料囉!
訂閱:
文章 (Atom)