前言
簡單報表我們可以通過label、textBox和PrintDialog來實現,但是一般在實際生產過程中,用戶的報表需求一般都是比較復雜的。
本篇主要記錄對於傳統中國式復雜報表的處理方法和解決思路,為后續的學習、開發做下筆記,不足之處請指正。
ReportViewer控件包安裝
新建一個Winfrm應用程序,右鍵解決方案,選中NuGet包管理器,搜索Report.Viewer、SqlServer和ReportingServices,完成控件包的安裝。
安裝完成后,可以在左側工具箱中看到ReportViewer控件。
Rdlc Report安裝
單擊菜單 “擴展”-“管理擴展”,搜索關鍵字Rdlc Report,完成下載,關閉所有VS項目后,系統自動安裝(大約需要10分鍾,耐心等待)。
安裝初始化
單擊“Modify”開始安裝
耐心等待完成安裝。
添加數據集
右鍵項目,選擇“添加”-“新建項”,選擇“數據集”。
添加必要的數據集字段,用於后續報表中需要顯示的內容。
添加報表rdlc
右鍵項目,選擇“添加”-“新建項”,選擇“Visual C#項”,選擇時需要注意,這里的報表是繁體字(只有rdlc模塊安裝成功才可以選到報表)。
此時,我們可以在如下界面進行報表模板的相關設置了。
空白處單擊右鍵,選擇“插入”-“矩陣”,選擇我們剛剛建立的數據源。
然后根據需要調整模板,插入行或者列,合並(插入列后即可實現合並單元格)或者拆分單元格。
WinFrm前台設定
核心代碼
1 private void btnPrint_Click(object sender, EventArgs e) 2 { 3 // Jeremy 2019.11.26 4 // 構造新的DataTable,字段名稱和DataTableMain中的一致 5 DataTable dt = new DataTable(); 6 dt.Columns.Add("dtReportName"); 7 dt.Columns.Add("dtName"); 8 dt.Columns.Add("dtAge"); 9 dt.Columns.Add("dtBirthday"); 10 dt.Columns.Add("dtWorkNO"); 11 dt.Columns.Add("dtInTime"); 12 dt.Columns.Add("dtCall"); 13 dt.Columns.Add("dtJob"); 14 dt.Columns.Add("dtDegree"); 15 dt.Columns.Add("dtRemark"); 16 // 動態添加前台傳來的數據 17 dt.Rows.Add(new object[] { this.txtReportName.Text, this.txtName.Text, this.txtAge.Text, this.dtpBirthday.Value.ToString(), this.txtWorkNO.Text, this.dtpInTime.Value.ToString(), 18 this.txtCall.Text, this.txtJob.Text, this.txtDegree.Text, this.txtRemark.Text}); 19 // 名稱需要用我們之前設定的 "ReportMain.rdlc" 20 // 另外需要將ReportMain.rdlc文件復制到當前可執行程序目錄下 21 this.reportViewerMain.LocalReport.ReportPath = "ReportMain.rdlc"; 22 this.reportViewerMain.LocalReport.DataSources.Clear(); 23 // 名稱需要用我們之前設定的 "DataSetReport" 24 this.reportViewerMain.LocalReport.DataSources.Add(new ReportDataSource("DataSetReport", dt)); 25 this.reportViewerMain.RefreshReport(); 26 }
效果展示
作者:Jeremy.Wu
出處:https://www.cnblogs.com/jeremywucnblog/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。