報告生成器FastReport .NET實踐指南:從WPF應用程序創(chuàng)建銷售收據(jù)
報表生成器FastReport .NET是適用于.NET Core 3,ASP.NET,MVC和Windows窗體的全功能報告庫。使用FastReport .NET,您可以創(chuàng)建獨立于應用程序的.NET報告。
近日,F(xiàn)astReport .Net升級到v2020.3版,在此版本中,添加了瑞士QR碼,允許配置打印機托盤以打印報告的最后一頁,不再支持.NET Framework 2.0,同時修復了多個Bug問題,感興趣的朋友可點擊下方按鈕下載最新版。
每個WinForms開發(fā)人員都認為標準的表單控件看起來太單一了,如果能給應用程序帶來更有趣的設計就好了。因此,特別是在需要特殊設計的情況下,微軟創(chuàng)建了一個特殊的庫——WPF (Windows Presentation Foundation)。
如果想創(chuàng)建一個銷售會計軟件,需要生成主要的會計文檔,例如發(fā)票和收據(jù)。這些文檔應該反映來自數(shù)據(jù)庫的數(shù)據(jù)。最好的解決方案是使用報表生成器創(chuàng)建文檔模板并填充數(shù)據(jù)??梢允褂脠蟊砩善鲙鞂蟊砑傻絎PF應用程序中。因此,對于任何事件,都可以生成和顯示報表,以及導出報表并將其發(fā)送到打印。
在輸出報表之前,需要在報表設計器中創(chuàng)建模板。在本文中,我們將使用FastReport .NET報告生成器。
在銷售收據(jù)信息的賣方,買方和已售出的貨物將顯示。有些國家傾向于單獨指出稅率,計算應繳稅款以及稅后的最終金額。因此,在我們的示例中,我們將考慮這樣一個銷售收據(jù)。
因為數(shù)據(jù)將從數(shù)據(jù)庫中獲取,所以首先我們需要創(chuàng)建到數(shù)據(jù)源的連接。在本例中,我們的任務是創(chuàng)建以下模板:
為了顯示特定順序的每個表中的數(shù)據(jù),必須連接所有這些表。為此,請快速報告。Net提供了一種通過鍵鏈接表的機制。Order表鏈接到Customers和Employees表,Order Details表鏈接到訂單和產品。
這意味著,對于特定的訂單記錄,將按鍵從這些表中選擇相應的數(shù)據(jù)。這樣我們就可以從客戶表中獲取具體訂單記錄的買家名稱:
數(shù)據(jù)帶有一個詳細的帶及其頁眉和頁腳帶。對于詳細數(shù)據(jù)波段,定義了訂單詳細信息源。該表也有鏈接:
正是如此,它鏈接到Orders表,以及可以從中獲得產品名稱的產品表。
現(xiàn)在,當清楚主要信息來自于訂單表,詳細的產品信息來自于訂單明細表時,我們可以考慮總數(shù)。第一個是行總和——商品數(shù)量與價格的乘積是通過簡單地乘以字段來計算的:[訂單細節(jié).單價]*[訂購明細.數(shù)量]。這個總數(shù)是為每一項計算的。
接下來,需要匯總此列中的所有總數(shù),并在subtotal字段中顯示它們。為此,在數(shù)據(jù)窗口中創(chuàng)建一個新的總數(shù):
讓我們給它命名為SubTotal,并在出現(xiàn)的窗口中設置屬性:
對于數(shù)據(jù)表達式,我們使用了與行總數(shù)相同的字段相乘的組合。這樣我們就得到了所有產品的總和。
Tax Rate字段指示必須以稅收形式支付的稅基的百分比。在這里,這個數(shù)字是5%。對于應稅字段,您需要計算應稅金額。公式很簡單:總計*利率:
((小計)* 0.05)
最后,總應付款。它由小計和稅金的總和組成:
[[小計] + [小計] * 0.05]
這樣就完成了銷售收據(jù)的創(chuàng)建。然后需要在應用程序中保存報表模板。例如,創(chuàng)建App_Data文件夾并將報告模板和數(shù)據(jù)庫nwind.xml保存在其中。
要在應用程序中顯示報表,我們需要向表單添加ScrollViewer組件,以便能夠滾動報表。在內部添加另一個組件——列表框。它將用于以Xaml格式顯示報表。在申請表中添加三個按鈕:顯示報表、導出報表為PDF、打印報表。
為每個按鈕添加一個單擊事件。因此,報告顯示:
private void Button_Click(object sender, RoutedEventArgs e) { var report = new Report(); report.Load("C:/Users/User/source/repos/WPFInvoice/WPFInvoice/App_Data/invoice.frx"); var data = new DataSet(); data.ReadXml("C:/Users/User/source/repos/WPFInvoice/WPFInvoice/App_Data/nwind.xml"); report.RegisterData(data); report.Prepare(); var export = new XAMLExport(); export.HasMultipleFiles = true; using (var ms = new MemoryStream()) { export.Export(report, ms); lb.Items.Add(new Frame() { Content = XamlReader.Load(ms) }); } }
在這里,我們創(chuàng)建一個報表對象,并將之前創(chuàng)建的報表模板加載到其中。接下來,創(chuàng)建一個數(shù)據(jù)源并將其注冊到報表中。WPF應用程序中的表單是使用XMAL語言構建的。因此,報告必須以這種格式顯示。為此,我們執(zhí)行了到XMAL的導出。
將報表導出為PDF格式的按鈕代碼:
private void PDFExport_Click(object sender, RoutedEventArgs e) { var report = new Report(); report.Load("C:/Users/User/source/repos/WPFInvoice/WPFInvoice/App_Data/invoice.frx"); var data = new DataSet(); data.ReadXml("C:/Users/User/source/repos/WPFInvoice/WPFInvoice/App_Data/nwind.xml"); report.RegisterData(data); report.Prepare(); var export = new PDFExport(); export.HasMultipleFiles = true; using (var fs = new FileStream("C:/Users/User/source/repos/WPFInvoice/WPFInvoice/App_Data/report.pdf", FileMode.Create)) { export.Export(report, fs); } }
這里的思想與報表的顯示相同,但我們將從導出中獲得的結果保存在一個文件夾中,而不將其添加到表單中。
打印報告的按鈕代碼:
private void Print_Click(object sender, RoutedEventArgs e) { PrintDialog printDialog = new PrintDialog(); if (printDialog.ShowDialog() == true) { printDialog.PrintVisual(lb, "Print the report"); } }
在打印報告之前,需要首先使用按鈕來顯示它。通過單擊它,將調用打印對話框并打印ListBox組件的內容。
現(xiàn)在運行應用程序,點擊Show按鈕:
現(xiàn)在不僅可以查看收據(jù)創(chuàng)建,還可以保存為PDF格式并打印它!還可以將它導出到FastReport中可用的其他文件格式:HTML、BMP、PNG、JPEG、GIF、TIFF、EMF、PDF、XLSX、DOCX、PPTX、ODS、ODT、RTF、文本、XPS、XML、XAML、PS、PPML、LaTeX、Json、Dbf、Csv、XLS (Biff8)、SVG、ZPL。
還想要更多嗎?您可以點擊閱讀【FastReport 報表2020最新資源盤點】,查找需要的教程資源。如果您有任何疑問或需求,請隨時加入FastReport技術交流群(783996712),我們很高興為您提供查詢和咨詢。