原創|使用教程|編輯:鄭恭琳|2020-01-19 14:39:53.250|閱讀 636 次
概述:許多現代的報表生成器都允許您嵌入另一個報表,即所謂的子報表。通過以這種方式劃分報表,您可以根據條件控制報表的結構。在FastReport.Net中,子報表僅在另一頁上創建,并且可以訪問與主報表相同的數據。主報表將一個子報表對象添加到您計劃放置該子報表的位置。該對象是將立即創建的報表頁面的鏈接。作為新報表頁面的一部分,您可以創建所需的模式。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
許多現代的報表生成器都允許您嵌入另一個報表,即所謂的子報表。為什么要這么做?例如,為了方便設計報表。如果主報表和子報表具有不同的類型,則更容易分別創建它們。
此外,通過以這種方式劃分報表,您可以根據條件控制報表的結構。例如,您在主報表中顯示了一些基本信息,但是根據該數據或報表中的某些參數,將選擇多個子報表之一。這使您的報表更具通用性。無需在不同情況下創建多個報表。
ActiveReports報表生成器的用戶對此問題感到困惑:
我有一個包含兩個子報表的報表。我想根據條件運行或不運行每個子報表。這可能嗎?
技術支持回復:
是的,可以根據某些條件從父報表中選擇子報表。例如,您可以在Detail的Format Event中使用SubReport控件的Visible屬性,基于每次觸發Detail.OnFormat事件時都會增加的計數器變量來控制子報表的可見性。
在FastReport.Net中,子報表僅在另一頁上創建,并且可以訪問與主報表相同的數據。主報表將一個子報表對象添加到您計劃放置該子報表的位置。該對象是將立即創建的報表頁面的鏈接。作為新報表頁面的一部分,您可以創建所需的模式。
順便說一句,您可以先創建一個包含多個頁面的報表,然后,如果需要,可以添加一個子報表對象,并將其放在其屬性中,以鏈接到所需頁面。
讓我們看一下如何根據條件制作帶有子報表的報表。實際上,這個想法很簡單。由于報表中包含腳本,因此我們將提供所需子報表的可見性。在這種情況下,子報表應放在同一位置,一個對象放在另一個對象上。
假設我們的報表顯示了訂單信息。還有一些與訂單表相關的報表:訂單詳細信息、產品、客戶。除了訂單信息外,我們還要列出訂單中的產品或客戶信息。該報表具有一個參數,基于該參數我們將顯示產品列表或客戶信息。
主報表的模板非常簡單:
有關訂單的基本信息來自“Orders”訂單表。在添加的字段旁邊,我們有一個Subreport對象。在Subreport1屬性中,您絕對應該將PrintOnParent屬性設置為true。
當我們添加子報表對象時,會自動添加一個新的報表頁面。在此頁面上,我們創建一個子報表模板,該模板將顯示產品列表。由于“Orders”訂單表與“Order Details”訂單明細相關聯,因此該報表將顯示與當前訂單相對應的記錄。訂單明細表還具有與產品表的連接。我們將使用來自此連接的數據:
這就是為什么到字段的鏈接具有這樣的視圖的原因:Order Details.Products.ProductName。
現在,再添加一個子報表對象。將其放在Subreport1上。您還需要將PrintOnParent屬性設置為true。
在第二個子報表模板中,我們從“Customers”客戶表中添加一個與“Orders”訂單表有聯系的字段。
現在,我們有了一個包含兩個子報表的報表。添加報表參數。可以從報表外部(例如,從用戶程序)設置參數。
對于主報表中的Data band,創建一個處理程序BeforePrint事件:
private void Data1_BeforePrint(object sender, EventArgs e) { if ((int)Report.GetParameterValue("Parameter") == 1) { Subreport1.Visible = false; Subreport2.Visible = true; } else { Subreport1.Visible = true; Subreport2.Visible = false; } }
代碼很簡單,因此實際上基本的編程技能足以創建此類報表。
結果,產品列表將如下所示:
客戶信息表將如下所示:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn