本文转载自:http://blog.csdn.net/zshuaihua/article/details/25786077
环境:Visual Studio 2010, C#;
前言:本来是用VS2010连接Oracle数据库做一个报表功能,数据集设置部分出了些问题还未解决,因此先用本地动态数据为测试用例先熟悉VS自带的ReportViewer控件。新手上路,共同进步。牛蛙可以忽略。
本文主要包含以下内容:
一、ReportViewer使用小例子的完整步骤(新建-设计-编码-调试-结果);
二、ReportViewer使用过程常见问题及关键注意点(仅为本人个人观点);
三、参考资料;
四、心得体会;
===================================================================================================================================
一、ReportViewer使用小例子的演示。
1、新建项目。
新建一个Windows窗口程序项目,命名为“Demo";
2、加入ReportViewer控件。
(1)在默认出现的Form1.cs[设计]视图中手动调节下Form1窗体的大小,左侧工具箱-->报表-->双击其中的”ReportViewer";
(图 1)
(2)切换至设计窗口,选择ReportVierwer控件右上角黑色小三角,显示“ReportViewer任务”,选择”在父容器中停靠“;
(图 2)
3、添加数据集。
(1)在”解决方案资源管理器“的本项目”Demo“上右键,-->添加-->新建项...。在”已安装的模板“(左侧)选择”数据“,在对应的右侧栏中选”数据集“,并为其命名为”testDataSet.xsd“。
(图 3)
(2)在自动显示的testDataSet.xsd窗口空白处右键,-->添加-->数据表。
(图 4)
(3)点击表头为其改名为”testDataTable",并在下一行的空白处右键,-->添加-->列。按快捷键“Ctrl + L”,共建四个列,并将列名自定义修改。(及时保存)
(图 5)
4、添加报表。
(1)同添加数据集相似。在项目名称上右键,-->添加-->新建项...。”已安装模板“中选择”Reporting“,相应右侧选择”报表“,在下面名称中改为”testReport.rdlc“。
(图 6)
(2)在新视图的主体部分(黑色方框内部为主体部分,外部为报表部分)空白处右键,-->插入-->表。
(图 7)
(3)会自动弹出”数据集属性“对话框,将”名称“改为”DataSetName"(这个名称很重要,后面代码中要用到,故要记清),“数据源”选择刚新建的“testDataSet",”可用数据集“会自动选择”testDataTable“,"确定”。
(图 8)
(4)在testReport.rdlc[设计]视图下,刚建的“表”只有三列,在任一单元格上右键,-->插入列-->靠右。在第一行的”表头“输入这三列的表头,在第二行的”数据“行,鼠标移动每个单元格上,点击单元格右上角的图标,选择相应的列。
(图 9)
5、绑定报表。
返回”Form1.cs[设计]"视图,如图 2类似,这次点击“选择报表”右侧的下拉条,选择我们新建的报表“demo.testReport.rdlc",全部保存。
(图 10)
6、添加代码。
查看”Form1.cs“的代码,在Form1_Load()方法中添加代码。代码如下(以下只是Form1_Load()方法的代码,不是全部,添加时需要在using下多加一行)。
7、运行效果。
===================================================================================================================================
二、需要注意的几个地方。
1、代码中new ReportDataSource("DataSetName",dt)),这里的DataSetName是上面”一、4、(3)“里那个名字,而不是所建的数据集文件”testDataSet.xsd"的名字。我之前因为把这里弄错,花了好长时间才修正。
2、按上述步骤弄完后,也许还不好出来想要的结果。可能会弹出“本地报表处理期间出错”等错误提示。
解决方法:将“testReport.rdlc"文件复制一份放到提示的指定Debug目录下。
上述方法固然可以,但每次都要手动将文件进行复制,显然不合适。这时其实只需要在”解决方案资源管理器“中点击报表文件”testReport.rdlc",在下方的属性一栏中,从“复制到输出目录”后面的下拉菜单中选择“始终复制”。这样,便不用手动往Debug目录复制文件了。(也有网友将属性中的“生成操作”一项的“嵌入的资源”改为“内容”。但对本例不适用,仅作说明)
===================================================================================================================================
三、参考资料。
1、本例最初的参考:参考资料1
2、对于如何自定义报表每页显示多少行的参考:参考资料2
3、关于报表中分组的参考:参考资料3
4、调试过程遇到问题解决思路的参考:参考资料4
===================================================================================================================================
四、心得体会。
程序员是干什么的?是解决问题的。因此,遇到问题后,我们要做的就是去解决它,而且,是问题就一定会解决的。
很多问题不怕你在上面花费时间,花的时间跟自己对这个问题的认识程序是成正比的。解决问题的过程,我们可以从更多侧面学到很多,无论是纵向加深理解,还是横向的知识扩展。
最后引用一句话,是解决这个问题最烦燥时,查资料的无意间发现一网友的个人签名,跟大家共勉:
“哈哈,快乐的程序员”
快乐是一种态度,哈哈,千万不要为了一时的小问题放弃了生活中的其他快乐。