C# - VS2019 WinFrm应用程序开发报表 - ReportViewer控件初涉
前言
简单报表我们可以通过label、textBox和PrintDialog来实现,但是一般在实际生产过程中,用户的报表需求一般都是比较复杂的。
本篇主要记录对于传统中国式复杂报表的处理方法和解决思路,为后续的学习、开发做下笔记,不足之处请指正。
ReportViewer控件包安装
新建一个Winfrm应用程序,右键解决方案,选中NuGet包管理器,搜索Report.Viewer、SqlServer和ReportingServices,完成控件包的安装。

安装完成后,可以在左侧工具箱中看到ReportViewer控件。

Rdlc Report安装
单击菜单 “扩展”-“管理扩展”,搜索关键字Rdlc Report,完成下载,关闭所有VS项目后,系统自动安装(大约需要10分钟,耐心等待)。

安装初始化

单击“Modify”开始安装

耐心等待完成安装。

添加数据集
右键项目,选择“添加”-“新建项”,选择“数据集”。

添加必要的数据集字段,用于后续报表中需要显示的内容。

添加报表rdlc
右键项目,选择“添加”-“新建项”,选择“Visual C#项”,选择时需要注意,这里的报表是繁体字(只有rdlc模块安装成功才可以选到报表)。

此时,我们可以在如下界面进行报表模板的相关设置了。

空白处单击右键,选择“插入”-“矩阵”,选择我们刚刚建立的数据源。


然后根据需要调整模板,插入行或者列,合并(插入列后即可实现合并单元格)或者拆分单元格。


WinFrm前台设定

核心代码
private void btnPrint_Click(object sender, EventArgs e)
{
// Jeremy 2019.11.26
// 构造新的DataTable,字段名称和DataTableMain中的一致
DataTable dt = new DataTable();
dt.Columns.Add("dtReportName");
dt.Columns.Add("dtName");
dt.Columns.Add("dtAge");
dt.Columns.Add("dtBirthday");
dt.Columns.Add("dtWorkNO");
dt.Columns.Add("dtInTime");
dt.Columns.Add("dtCall");
dt.Columns.Add("dtJob");
dt.Columns.Add("dtDegree");
dt.Columns.Add("dtRemark");
// 动态添加前台传来的数据
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(),
this.txtCall.Text, this.txtJob.Text, this.txtDegree.Text, this.txtRemark.Text});
// 名称需要用我们之前设定的 "ReportMain.rdlc"
// 另外需要将ReportMain.rdlc文件复制到当前可执行程序目录下
this.reportViewerMain.LocalReport.ReportPath = "ReportMain.rdlc";
this.reportViewerMain.LocalReport.DataSources.Clear();
// 名称需要用我们之前设定的 "DataSetReport"
this.reportViewerMain.LocalReport.DataSources.Add(new ReportDataSource("DataSetReport", dt));
this.reportViewerMain.RefreshReport();
}
效果展示

作者:Jeremy.Wu
出处:https://www.cnblogs.com/jeremywucnblog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
C# - VS2019 WinFrm应用程序开发报表 - ReportViewer控件初涉的更多相关文章
- 部署报表和 ReportViewer 控件 rdlc
部署报表和 ReportViewer 控件 您可以将报表和 ReportViewer 控件作为应用程序的一部分自由发布.根据控件类型以及报表是配置为本地处理还是远程处理,部署要求会有很大不同.在同一个 ...
- WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用
WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用 转自:http://www.cnblogs.com/wuhuacong/arch ...
- 动态绑定ReportViewer控件之经验总结
以上两篇文章已经很丰富了,但是照做一遍不行,检查了N遍还是不行,就是找不出问题原因,总是提示“尚未为数据源“DataSet1_DataTable1”提供数据源实例.”这主要是说在为ReportView ...
- python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐(二)
在上一篇blog:python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 中介绍了python中的tkinter的一些东西,你可能对tkinter有一定的了解了.这篇b ...
- RS开发日期提示控件默认为昨天之进阶篇
时隔<RS开发日期提示控件默认为昨天>这篇博文已经很久了,请原谅我隔了这么久才继续来写这篇笔记.也希望读到这篇笔记的朋友可以从这篇笔记中学习到一些关于RS日期控件和JS的一些应用知识,当然 ...
- Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全
原文:Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全 前面简单学习了一些Android UI的一些基础知识,那么接下来我们一起来详细学习Android的 ...
- Android开发:文本控件详解——TextView(二)文字跑马灯效果实现
一.需要使用的属性: 1.android:ellipsize 作用:若文字过长,控制该控件如何显示. 对于同样的文字“Android开发:文本控件详解——TextView(二)文字跑马灯效果实现”,不 ...
- VS2017中使用ReportViewer控件,vs2017找不到Microsoft Rdlc Report Designer for Visual Studio
VS2017中没有ReportViewer控件,这个控件用来实现在项目中显示和打印关系数据库中的表比较容易,特别是想要打印的时候,这个比用DataGridView和PrintDocument要简单一些 ...
- Qt开发Activex笔记(二):Qt调用Qt开发的Activex控件
若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693 长期持续带来更多项目与技术分享 ...
随机推荐
- Redis学习四(运维指南).
一.上线规划 一般 redis 的参数配置都在 redis.conf 中,在上线前根据实际环境配置好合适参数,能有效提高 redis 的可用性. redis 的运行机器 CPU 不求核数多,但求主频高 ...
- 利用电脑开启自带虚拟wifi,无需第三方工具。
注:此方法只验证win 7以上系统,XP server 2016 系统未验证 1.新建记事本,在记事本中输入netsh wlan set hostednetwork mode=allow ssid= ...
- LeetCode 2: single-number II
Given an array of integers, every element appears three times except for one. Find that single one. ...
- SQL手工注入方法
SQL手工注入漏洞测试(MySQL数据库) 的靶场练习 流程与方法 注意:加粗部分给重点 查询数据库名http://219.153.49.228:46939/new_list.php?id=22 ...
- Kubernetes入门学习--在Ubuntu16.0.4安装配置Minikube
目 录 一. 安装minikube环境 1.1. 安装前准备 1.2. 安装Lantern 1.2.1. Lantern下载网站 1.2.2. Lantern下载地址 1.2.3. Lantern安装 ...
- Java 获取前一天的24小时
//获取凌晨时间 public static Date getTodayStartTime(){ Calendar todayEnd = Calendar.getInstance(); todayEn ...
- Linux命令比较文件内容
文件准备 创建两个文件,分别为a.txt和b.txt,它们所含内容分别为: a.txt b.txt 1-wfhune2-chdamnsbchj3-uyr92fiubkqw5-cgvdnsb 2-djy ...
- Java基础(三十)泛型程序(Generic Programming)
一.泛型程序的定义和使用 1.为什么要使用泛型程序设计 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用.同时,使得程序具有更好的可读性和安全性. ArrayList<String&g ...
- 文件读取(filestream)
在stream中已经介绍过,文件读取应用filestream,其是以字节为单位读取文件的.在操作中,当应用filestream创建文件流,读取时应先定义一个字节数组,在转化成char类型,最后转化成s ...
- fenby C语言 P26
指针 地址 类型+“*”+变量名=指针变量 int *p1;//指向整型变量的指针变量p1 float *p2;//指向浮点型变量的指针变量p2 char *p3;//指向字符型变量的指针变量p3 “ ...