2012年9月20日 星期四

Crystal Reports 指定子報表接收DataTable資料


建立Crystal Reports報表,使用XML Schema File,使用Crystal Reports中資料庫 > 設定資料來源位置 > 建立新連結 > ADO.NET(XML)來設定報表欄位的方式,這些步驟就先略過了。直接跳回VB端,紀錄塞資料給指定子報表的方式。


REM 宣告 Table
Dim print_Main As New DataTable
Dim print_TermsOfPayment As New DataTable
Dim print_Building As New DataTable
Dim print_Agreement As New DataTable

REM 取得報表資料:
print_Main = Wer_Service_Name( Mode=2, "參數", ServerVer)
print_TermsOfPayment = Wer_Service_Name( Mode=3, "參數", ServerVer)
print_Building = Wer_Service_Name( Mode=4, "參數", ServerVer)
print_Agreement = Wer_Service_Name( Mode=5, "參數", ServerVer)

REM 載入資料至主報表:
rptDoc_R001.SetDataSource(print_Main)

REM 載入資料至子報表:
REM 方法一,直接指定子報表名稱並匯入資料。
rptDoc_R001.Subreports.Item("R001_TermsOfPayment.rpt").SetDataSource(print_TermsOfPayment)
rptDoc_R001.Subreports.Item("R001_building.rpt").SetDataSource(print_Building)
rptDoc_R001.Subreports.Item("R001_agreement.rpt").SetDataSource(print_Agreement)
REM 方法二,以順序指定子報表並匯入資料。
rptDoc_R001.Subreports.Item(0).SetDataSource(print_TermsOfPayment)
rptDoc_R001.Subreports.Item(1).SetDataSource(print_Building)
rptDoc_R001.Subreports.Item(2).SetDataSource(print_Agreement)

備註:
使用方法二,要注意子報表名稱的排序,需跟子報表放置順序一樣,否則很容易出錯。也就是最好把子報表的名稱R001_TermsOfPayment.rptR001_building.rptR001_agreement.rpt,改成R001_0.rpt""R001_1.rpt""R001_2.rpt"這樣的名稱,這樣給資料到子報表時才不會出錯。 


傳值到子報表需在報表端設定。

子報表端設定:
對子報表點選右鍵 > 變更子報表連結... > 設定要連結的欄位。

























除了可以連結欄位之外,也可以用來傳值到子報表。

先分別設定好母報表端的「參數欄位」以及子報表的「參數欄位」,接著設定子報表連結。
當母報表接收到傳入值時,就可以透過子報表連結傳遞到子報表端。

沒有留言:

張貼留言