[RDLC] RDLC實現同一份Report不同格式頁之旁門左道

  • 21791
  • 0
  • 2011-11-11

RDLC實現同一份Report不同格式頁之旁門左道

首先說明一下,之所以用乓旁門左道為題,主因是我不確定這是否是好的解決方法(有可能是小弟不材,若您有更好的或是正確的解法,希望不吝指教囉)

需求是這樣的,User有一份送交某機關的報表,而這份報表它的第一頁格式與第二頁之後的明細格式是不相同的

簡單的說,第一頁是一張類似申請單的表格,從第二頁之後才是明細資料的List

以往使用ReportViewer開發RDLC報表的經驗,同一份報表大部份都是同樣的格式,這次的需求算是第一次接觸到

,花了點時間試了幾個方式之後,最後利用二個Report的Table元件來實現這樣的需求

 

先來看一下欲達成的報表長相

image

image

 

接著來看如何利用二個Table來達成以上的報表需求

 

(1)利用第一個Table,只保留Header,在Header裡再拉一個Table,利用內層的Table來製作第一頁的報表格式

image

image

內層Table編排後的效果

 

 

 

 

image

 

(2)接著在原本的頁面上,再放置第二個Table,其作用做為呈現報表第二頁以後的明細列表

image

 

(3)格式編排完之後,利用設定換頁技巧來達到第一頁只呈現第一個Table格式

在第一個Table的Properties裡,設定在這個Table後安插換頁符號,來達到呈現第一個Table格式之後,就馬上換頁

,如此一來第二個Table的明細格式資料自然而然的就呈現在第二頁之後了,並且在第一個Table裡並未設定每頁

顯示,因此第一個Table的格式並不會重覆於第二頁之後的頁面上

image

 

(4)至此差不多達成需求了,最後一個小問題是最後一頁要多加呈現總計及二個簽名欄位,這個部份利用Group分組來達成

,在第二個Table裡用Group分組方式安插每18筆資料換行,並設定Group Footer,利用Group Footer編排最後一筆資料後,

要多加呈現的內容

 

分頁計算式:=Int((RowNumber(Nothing)-1)/18),並勾選Page break at end

image

利用Group Footer建立最後一筆資料要呈現的內容

image

接著設定只需最後一筆資料後再呈現Group Footer,其餘頁面不呈現Group Footer

利用Visibility / Hidden 設定運算式:=iif((RowNumber(nothing) / Count(Fields!empname.Value, "xxxxx")) =1 ,false,true)

xxxx:Your DataSet Name

image

 

(5)在程式碼裡,由於使用到的二個主要Table的資料來源不同,因此利用RDLC可接受多個DataTable的特性,直接DataSources.Add給予二個DataTable資料即可

 

 

 

透過這樣的方式,即達成此報表需求,若您有更好的方式也歡迎不吝告知囉

 

備註:

原本Footer的部份是直接使用第二個Table的Footer來做,不過Footer的部份卻跑到另一個新頁面,此問題後來在MSDN討論裡看到解決方式

,相關連結:RDLC Table 頁尾一問

 

若本文對您有所幫助,歡迎轉貼,但請在加註【轉貼】及來源出處,並在附上本篇的超連結,感恩您的配合囉。

By No.18