前言
简单报表我们可以通过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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。