DevExpress Winforms使用技巧教程:如何創(chuàng)建自定義DevExpress報(bào)表控件(上)
下載DevExpress v20.1完整版 DevExpress v20.1漢化資源獲取
DevExpress Winforms Controls 內(nèi)置140多個(gè)UI控件和庫,完美構(gòu)建流暢、美觀且易于使用的應(yīng)用程序。想要體驗(yàn)?點(diǎn)擊下載>>
本文記錄如何構(gòu)建自定義的DevExpress Report控件(Swiss QR-Bill報(bào)表組件),以及如何解決開發(fā)過程中遇到的問題,希望這些信息對創(chuàng)建自定義DevExpress Report控件的用戶有價(jià)值。
為幫助消除報(bào)表控件開發(fā)過程中的神秘性,本文介紹如何創(chuàng)建設(shè)計(jì)時(shí)設(shè)置、序列化設(shè)計(jì)器組件和相關(guān)的“bricks”,以及如何渲染和打印組件。第一部分包含有關(guān)Swiss QR Bill控件的一般信息,并描述控件本身的要求;第二部分詳細(xì)介紹了組件的實(shí)現(xiàn)。
一般信息
Swiss QR Bill是一種帶有QR碼的新型付款單,Swiss QR Bill包含以下元素:
- 收據(jù)
- 付款部分
- 條碼
發(fā)票可以使用以下布局:
- 在A4紙上打印的“全額”發(fā)票;
- 在A6紙上打印的“簡短”發(fā)票;
- 連續(xù)打印發(fā)票;
- 在單個(gè)頁面上打印的發(fā)票。
“完整”發(fā)票包含收據(jù),而“空”發(fā)票僅包含付款信息。 組件的BillKind屬性指定完整發(fā)票的PaymentAndReceipt值和短期發(fā)票的PaymentOnly值,連續(xù)打印或單獨(dú)打印是通過IntegratedMode屬性指定的。
將發(fā)票打印在A4或A6紙上(或?qū)С鰹镻DF),并分別通過BillOption.PreviewSeparatorKind和BillOption.PdfSeparatorKind屬性指定perforation line。該組件允許您更改任何字段的語言和字體,StringData屬性可用于將字段綁定到外部數(shù)據(jù)源。
報(bào)表控件開發(fā)–概述
若要創(chuàng)建一個(gè)新的報(bào)表控件,您必須:
- 選擇一個(gè)base類,如果找不到合適的控件派生,請從XRControl類繼承一個(gè)組件。
- 創(chuàng)建組件的對象模型,指定一組屬性和相關(guān)屬性,這些屬性決定如何序列化屬性以及如何在Property網(wǎng)格中顯示屬性。
- 為Visual Studio和End User Designer創(chuàng)建組件設(shè)計(jì)器,設(shè)計(jì)人員在設(shè)計(jì)時(shí)確定組件的外觀和操作,根據(jù)需要添加屬性。
- 選擇組件的“brick”,一個(gè)明顯的選擇是基類創(chuàng)建的積木,但是,如果組件從XRControl類繼承,則有兩個(gè)選項(xiàng) - 如果需要簡單的Brick,則選擇VisualBrick作為Brick的基類;如果需要的容器,則選擇PanelBrick。
- 指定組件如何創(chuàng)建其"brick",并將組件的屬性映射到brick的特征。
- 實(shí)現(xiàn)BrickExporter類來呈現(xiàn) "brick",覆蓋用于繪圖和導(dǎo)出的方法。
以下各部分詳細(xì)介紹了如何更詳細(xì)地構(gòu)建SwissQRBill組件。
組件實(shí)現(xiàn)
由于SwissQRBill組件是XRControl的后代,因此它在設(shè)計(jì)器的工具箱中具有自己的 "brick"、序列化和項(xiàng)。
設(shè)計(jì)時(shí)
要將組件添加到Visual Studio工具箱,該組件必須具有ToolBoxItem(true)屬性。
WinForms End-User Designer要求向IToolBoxService注冊該組件,處理DesignPanelLoaded事件,然后調(diào)用IToolBoxService.AddToolBoxItem方法來注冊組件。
若要實(shí)現(xiàn)組件的設(shè)計(jì)時(shí)功能,請分別為Visual Studio和WinForms End-User Designer添加Designer和XRDesigner屬性??丶恼{(diào)整大小規(guī)則和智能標(biāo)記項(xiàng)必須根據(jù)需要進(jìn)行修改,智能標(biāo)記項(xiàng)是通過在組件設(shè)計(jì)器中注冊的DesignerActionList對象指定的, GetSelectionRulesCore方法修改控件的調(diào)整大小規(guī)則。
設(shè)置屬性網(wǎng)格時(shí),請?zhí)貏e注意可擴(kuò)展對象。 在此示例中,將創(chuàng)建ExpandableObjectConverter后代以重寫ConvertTo方法,新的ConvertTo方法實(shí)現(xiàn)更改了在屬性網(wǎng)格編輯器中顯示的字符串。 AddressTypeConverter的GetProperties方法刪除該地址類型不必要的屬性。
DevExpress技術(shù)交流群2:775869749 歡迎一起進(jìn)群討論