建立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.rpt、R001_building.rpt、R001_agreement.rpt,改成R001_0.rpt"、"R001_1.rpt"、"R001_2.rpt"這樣的名稱,這樣給資料到子報表時才不會出錯。
傳值到子報表:需在報表端設定。
子報表端設定:
對子報表點選右鍵 > 變更子報表連結... > 設定要連結的欄位。
除了可以連結欄位之外,也可以用來傳值到子報表。
先分別設定好母報表端的「參數欄位」以及子報表的「參數欄位」,接著設定子報表連結。
當母報表接收到傳入值時,就可以透過子報表連結傳遞到子報表端。