动态绑定ReportViewer控件之经验总结
以上两篇文章已经很丰富了,但是照做一遍不行,检查了N遍还是不行,就是找不出问题原因,总是提示“尚未为数据源“DataSet1_DataTable1”提供数据源实例。”这主要是说在为ReportViewer控件选择数据源的时候,还没有选择数据源实例,如图所示

,因此要选择一个数据源,例如ObjectDataSource1,这个一般是在你选择的时候自动生成的,但即使选择了数据源也还是会出错,比如“处理报表时出错。未能找到在 ObjectDataSource“ObjectDataSource2”的 TypeName 属性中指定的类型”等类似的错误,因为还差一个关键的步骤,就是配置数据源,我们要先选择业务对象,就是选择预先准备好的DataSet用来当容器(因为我们要把真正从数据库中取出来的数据放进去),

然后是定义数据方法,这个地方我不知道具体的过程或逻辑应该是怎样的,但我觉得应该返回一个DataSet,于是我就选择了一个Coyp()方法,

于是就顺利实现了,总结起来就是:
1、在页面添加ReportViewer控件。
2、新建一个DataSet文件,设置的字段名要与欲动态绑定的从数据库提取出来的DataSet一样,这个主要是用来当做容器,因为报表文件需要用到数据集文件。
3、新建报表文件rdlc,选择你想要的报表样式,并将DataSet中的字段拖拽到报表中。
4、为ReportViewer选择报表,选择数据源,并配置数据源(具体方法如上所述)。
5、最后就剩下在cs文件中动态指定数据源了,常用代码如下:
ReportDataSource rds = new ReportDataSource("DataSet1_DataTable1", dt2);//将从数据库中提取出的DataTable填进DataSet文件中的DataSet1_DataTable1。
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.Refresh();
另外,如果我们需要在同一页面显示不同情况的报表,比如你如果用的是折线图,但取出不同的数据它的刻度就会不同,有的数比较大有的数较小,这样就会影响效果,这种情况就可以制作几个不同的报表,这就真正用到了动态绑定,甚至于还有更强的方法,不用准备更多的报表,每次都让它通过代码生成,例如:
ControlCollection coll = ReportViewer1.Parent.Controls;
int oldIndex = coll.IndexOf(ReportViewer1);
ReportViewer newViewer = new ReportViewer();
coll.AddAt(oldIndex, newViewer);
coll.Remove(ReportViewer1);
newViewer.ShowToolBar = false;
newViewer.Width = 795;
newViewer.Height = 527;
newViewer.LocalReport.DataSources.Clear();
newViewer.LocalReport.ReportPath = MapPath("Report1.rdlc");
newViewer.LocalReport.ReportEmbeddedResource = "Report1.rdlc";
newViewer.LocalReport.DataSources.Add(rds);
newViewer.LocalReport.Refresh();
这个方法的大概意思就是用ControlCollection新建一个ReportViewer的控件集合,再删除已有的ReportViewer1,添加一个新的newViewer,然后指定需要的数据集,个人觉得这个方法更好一些,关于新生成的newViewer的属性一样可以用代码设置。
注意事项:
1、ReportViewer控件的样式可以设置,例如我就想要一个报表,不想看见刷新按钮等,这个就可以ShowToolBar设置为False。
2、实现Refresh在很多时候是必须的,因为已经选择不显示刷新按钮了。但如果你的页面有updatepanel控件就要注意了,这个会影响你的刷新,最好是去掉updatepanel控件。
动态绑定ReportViewer控件之经验总结的更多相关文章
- 部署报表和 ReportViewer 控件 rdlc
部署报表和 ReportViewer 控件 您可以将报表和 ReportViewer 控件作为应用程序的一部分自由发布.根据控件类型以及报表是配置为本地处理还是远程处理,部署要求会有很大不同.在同一个 ...
- C# - VS2019 WinFrm应用程序开发报表 - ReportViewer控件初涉
前言 简单报表我们可以通过label.textBox和PrintDialog来实现,但是一般在实际生产过程中,用户的报表需求一般都是比较复杂的. 本篇主要记录对于传统中国式复杂报表的处理方法和解决思路 ...
- VS2017中使用ReportViewer控件,vs2017找不到Microsoft Rdlc Report Designer for Visual Studio
VS2017中没有ReportViewer控件,这个控件用来实现在项目中显示和打印关系数据库中的表比较容易,特别是想要打印的时候,这个比用DataGridView和PrintDocument要简单一些 ...
- 基于Jquery WeUI的微信开发H5页面控件的经验总结(2)
在微信开发H5页面的时候,往往借助于WeUI或者Jquery WeUI等基础上进行界面效果的开发,由于本人喜欢在Asp.net的Web界面上使用JQuery,因此比较倾向于使用 jQuery WeUI ...
- C#VS2017添加ReportViewer控件
安装完vs2017之后我们进行添加Report Viewer控件: 1. 点击Tools -> Extensions and Updates... 2. 在新窗口搜索栏中输入rdlc后搜索,结果 ...
- Microsoft ReportViewer 控件类型版本兼容问题及解决方法
错误 Parser Error Message: The base class includes the field 'rvEquipment', but its type (Microsoft.Re ...
- 基于Jquery WeUI的微信开发H5页面控件的经验总结(1)
在微信开发H5页面的时候,往往借助于WeUI或者Jquery WeUI等基础上进行界面效果的开发,由于本人喜欢在Asp.net的Web界面上使用JQuery,因此比较倾向于使用 jQuery WeUI ...
- 转:ReportViewer控件使用方法
a. ReportViewer关联Report1.rdlc的简单呈现b. 对带有报表参数的Report1.rdlc的呈现c. 利用程式生成的DataSet 填充报表d. 调用存储过程 生成DataSe ...
- 找不到reportviewer控件在哪儿
請自行加入ReportViewer(9.0)到工具箱之中. 如下圖,
随机推荐
- UVa10653.Prince and Princess
题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- pyqt columnView例子学习
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import * from Py ...
- PC-HTML5-搜索框
代码如下: <input type="text" placeholder="输入 回车搜索" autofocus x-webkit-speech>很 ...
- 单调队列-Hdu-4122-Alice's mooncake shop
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4122 题目意思: 一家月饼店,有n个订单,从2001年1月1日0时开始24小时营业开m个小时,且每个 ...
- 从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)
一.移除性算法 (remove) C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
- Android内存泄漏监测(MAT)及解决办法
http://ttlnews.blogspot.com/2010/01/attacking-memory-problems-on-android.html 这篇文章是2010年1月份写的,其中有些已经 ...
- Linux 与 unix shell编程指南——学习笔记
第一章 文件安全与权限 文件访问方式:读,写,执行. 针对用户:文件属主,同组用户,其它用户. 文件权限位最前面的字符代表文件类型,常用的如 d 目录:l 符号链 ...
- iOS 面试题汇总
1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现 ...
- MagicalRecord(简化CoreData操作)
1.新建项目不勾选coredata 2.pod 'MagicalRecord' 3.新建模型文件 4.添加实体和属性 5.Create NSManagedObject subclass 6.增 Per ...
- struts2中的国际化
[java] view plaincopy 实现struts2中国际化其实非常简单 首先,struts2中的国际化是通过资源文件来配置的. 资源文件分为:action类级,package类级,还有we ...