打印自定義報表
DXPrinting Library提供了一種創(chuàng)建自定義打印報表的簡單方法,這種方法是基于稱為打印鏈接的特殊打印程序。DXPrinting Library引入了幾種類型的 printing links,每種鏈接都是為呈現(xiàn)特定的數(shù)據(jù)對象、創(chuàng)建報表以及導(dǎo)出和打印報表而設(shè)計的,可以通過從LinkBase抽象類繼承您的類來創(chuàng)建自定義打印鏈接。
下表列出了內(nèi)置的打印鏈接類型。
打印鏈接 | 描述 |
---|---|
SimpleLink | 呈現(xiàn)包含線性數(shù)據(jù)的數(shù)據(jù)對象。 |
CollectionViewLink | 呈現(xiàn)包含分層數(shù)據(jù)的數(shù)據(jù)對象,并實現(xiàn)ICollectionView 接口。 |
PrintableControlLink | DevExpress呈現(xiàn)控件。 |
創(chuàng)建簡單鏈接
簡單的打印鏈接通常用于在報表中顯示非分層數(shù)據(jù),在不需要將數(shù)據(jù)項分成組的情況下使用這種鏈接。
創(chuàng)建后,必須為簡單鏈接提供數(shù)據(jù)。要做到這一點,通過SimpleLink.DetailCount屬性指定數(shù)據(jù)項的數(shù)量,并處理SimpleLink.CreateDetail事件,每次需要新的數(shù)據(jù)項時都會引發(fā)該事件,并根據(jù)SimpleLink.DetailCount屬性指定的次數(shù)引發(fā)該事件,在處理程序中,將新的數(shù)據(jù)項分配給CreateAreaEventArgs.Data事件參數(shù)的屬性,所需數(shù)據(jù)項的索引可以使用CreateAreaEventArgs.DetailIndex屬性獲得。
除了數(shù)據(jù)項之外,還必須指定可視化表示。要做到這一點,創(chuàng)建一個DataTemplate ,它應(yīng)該應(yīng)用于每個數(shù)據(jù)項,然后將其分配給鏈接的SimpleLink.DetailTemplate屬性。
創(chuàng)建集合視圖鏈接
當(dāng)您需要在報表中顯示來自分層數(shù)據(jù)源的數(shù)據(jù),或者當(dāng)數(shù)據(jù)項應(yīng)該分成幾個組顯示時,集合視圖打印鏈接非常有用。
要將數(shù)據(jù)分配給集合視圖鏈接,需要創(chuàng)建一個實現(xiàn)ICollectionView接口的對象,它可以是System.Windows.Data.CollectionViewSource對象,向該對象提供數(shù)據(jù)后,將其分配給鏈接的CollectionViewLink.CollectionView屬性。
當(dāng)指定數(shù)據(jù)時,您應(yīng)該定義其可視化表示。要做到這一點,創(chuàng)建一個DataTemplate應(yīng)該應(yīng)用于每個數(shù)據(jù)項,并將其分配給鏈接的CollectionViewLink.DetailTemplate屬性。為了提供關(guān)于分組信息的鏈接,為每個分組級別創(chuàng)建一個GroupInfo對象,并通過GroupInfo.HeaderTemplate屬性指定一個應(yīng)該應(yīng)用于當(dāng)前分組級別中的每個組頭的模板,然后將GroupInfo對象添加到鏈接的CollectionViewLink.GroupInfos 集合中。
創(chuàng)建可打印控件鏈接
可打印控件鏈接用于呈現(xiàn)控件和實現(xiàn)IPrintableControl或IRootDataNode接口的數(shù)據(jù)對象。例如,TableView對象可以通過可打印控件鏈接呈現(xiàn)。
要創(chuàng)建一個可打印的控件鏈接,將適當(dāng)?shù)目丶驍?shù)據(jù)對象傳遞給PrintableControlLink構(gòu)造函數(shù)。
頁面設(shè)置
DXPrinting Library提供了許多設(shè)置,允許自定義報表的頁面選項。
您可以在報表中包含頁眉和頁腳,以及整個文檔的頁眉和頁腳。要做到這一點,分別通過TemplatedLink.PageHeaderTemplate、TemplatedLink.PageFooterTemplate、TemplatedLink.ReportHeaderTemplate和TemplatedLink.ReportFooterTemplate 屬性指定它們的模板。通過將適當(dāng)?shù)臄?shù)據(jù)對象分別分配給TemplatedLink.PageHeaderData、TemplatedLink.PageFooterData、TemplatedLink.ReportHeaderData和TemplatedLink.ReportFooterData屬性,這些模板也可以提供一些自定義數(shù)據(jù)。
下表列出了用于指定報表頁設(shè)置的其他屬性。
屬性 | 描述 |
---|---|
LinkBase.CustomPaperSize | 獲取或設(shè)置自定義紙張的大小(以百分之一英寸為單位測量)。 |
LinkBase.DocumentName | 獲取或設(shè)置文檔的名稱。 |
LinkBase.Landscape | 獲取或設(shè)置一個值,該值指示頁面方向是否為橫向。 |
LinkBase.Margins | 獲取或設(shè)置報表頁面的邊距(以百分之一英寸為單位測量)。 |
LinkBase.MinMargins | 指定最小打印機(jī)邊距值。 |
LinkBase.PaperKind | 獲取或設(shè)置文檔的紙張類型。 |
LinkBase.SuppressAutoRebuildOnPageSettingsChange | 獲取或設(shè)置一個值,該值指示是否有必要在每次更改鏈接的頁面設(shè)置時禁止重建文檔。 |
導(dǎo)出和打印報表
在創(chuàng)建鏈接對象并提供數(shù)據(jù)之后,您可以通過調(diào)用LinkBase.CreateDocument方法從鏈接創(chuàng)建文檔,現(xiàn)在報表生成了就可以打印和導(dǎo)出它,也可以在DocumentPreview控件中顯示它。要做到這一點,有必要創(chuàng)建一個新的LinkPreviewModel實例,將當(dāng)前鏈接作為初始化參數(shù),并將其分配給DocumentPreview.Model屬性。
使用LinkBase.ShowPrintPreview方法可打開報表預(yù)覽窗口。要打開一個模式預(yù)覽窗口,使用LinkBase.ShowPrintPreviewDialog方法,打印對話框可以通過LinkBase.Print方法調(diào)用,要在不打開任何對話框的情況下打印報告,請使用LinkBase.PrintDirect方法。
下表列出了用于將報表導(dǎo)出為不同格式的方法。
方法 | 描述 |
---|---|
LinkBase.ExportToCsv | 使用指定的CSV特定選項,用CSV格式將報表導(dǎo)出到指定的流。 |
LinkBase.ExportToHtml | 使用指定的特定于HTML的選項,用HTML格式將報告導(dǎo)出到指定的流。 |
LinkBase.ExportToImage | |
LinkBase.ExportToMht | 使用指定的MHT特定選項用MHT格式將報告導(dǎo)出到指定流。 |
LinkBase.ExportToPdf | 使用指定的PDF特定選項用PDF格式將報表導(dǎo)出到指定的流。 |
LinkBase.ExportToRtf | 使用指定的RTF特定選項用RTF格式將報表導(dǎo)出到指定的流。 |
LinkBase.ExportToText | 使用指定的特定于文本的選項用文本格式將報表導(dǎo)出到指定的流。 |
LinkBase.ExportToXls | 使用指定的特定于XLS的選項用XLS格式將報告導(dǎo)出到指定的流。 |
LinkBase.ExportToXlsx | 使用指定的特定于XLSX的選項,用XLSX格式將報告導(dǎo)出到指定的流。 |
LinkBase.ExportToXps | 使用指定的特定于XPS的選項用XPS格式將報表導(dǎo)出到指定的流。 |