动态绑定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控件。

时间: 2024-10-13 13:17:55

动态绑定ReportViewer控件之经验总结的相关文章

部署报表和 ReportViewer 控件 rdlc

原文:部署报表和 ReportViewer 控件 rdlc 部署报表和 ReportViewer 控件 您可以将报表和 ReportViewer 控件作为应用程序的一部分自由发布.根据控件类型以及报表是配置为本地处理还是远程处理,部署要求会有很大不同.在同一个应用程序中,既可以部署本地处理的报表,也可以部署远程处理的报表. 重新发布 ReportViewer 控件 可重新发布的 ReportViewer 控件是一个名为 ReportViewer.exe 的自解压缩文件,其中包括一个 .msi 文

报表reportviewer控件使用时,单行文本过长的解决办法

最近在做winform的报表,客户需要把纸质模板可以在系统中打印.一开始设计,认为vs自带控件reportviewer可以解决,但在测试过程中发现:若单行文本过长,报表自动分页,弊端是分页后,第一页文本框底部边框和第二页文本框顶端边框无法显示,由于客户是政府机关,要求严格,只好解决这个问题.在解决过程中也是想各种办法,第一种,判断是否分页,分页后,该文本框是否存在本页,若存在,则在相应分页底部和顶端划线,可是搜索属性框,并没有这些属性值,放弃.第二种,主体加边框,与矩阵重合,矩阵边框不要,使用主

Microsoft ReportViewer 控件类型版本兼容问题及解决方法

错误 Parser Error Message: The base class includes the field 'rvEquipment', but its type (Microsoft.Reporting.WebForms.ReportViewer) is not compatible with the type of control (Microsoft.Reporting.WebForms.ReportViewer). 添加引用,因为项目的.Net框架版本是4.0,因此Report

C#VS2017添加ReportViewer控件

安装完vs2017之后我们进行添加Report Viewer控件: 1. 点击Tools -> Extensions and Updates... 2. 在新窗口搜索栏中输入rdlc后搜索,结果中找到ReportDesigner后进行安装,安装完成后即可使用ReportViewer打开.Rdlc文件了 下载完控件后,关闭vs2017,自动加载安装Report Viewer控件,控件安装完成后打开vs2017,进行添加,步骤如下: 选择“工具” >>“ Nuget包管理器” >>

Asp.Net(c#)中使用ReportViewer控件制作报表

环境:VS2010 1.新建一个Default.aspx文件,把ReportViewer1控件和ScriptManager1拖到页面上. (1).从ReportViewer1控件的任务栏中选择设计新报表,出现”报表向导“对话框. 依次设置如下: “数据集属性”,选择或设置数据集. “排列字段”,将相应字段拖放到行组.列组.值字段对应的框中.? “选择布局”,根据需要需要选择相应布局.? “选择样式”,选择喜欢的样式,完成报表向导. (2).把ReportViewer1控件的选择报表选为Repor

转:ReportViewer控件使用方法

a. ReportViewer关联Report1.rdlc的简单呈现b. 对带有报表参数的Report1.rdlc的呈现c. 利用程式生成的DataSet 填充报表d. 调用存储过程 生成DataSet 填充报表==========简单的呈现 ==========1. 打开VS2005,文件->新建->网站 选择语言种类(C#)2. 在该解决方案下 设计其已经生成的Default.aspx3. 将工具箱-数据下的ReportViewer 拉入Default.aspx的设计界面4. 在用鼠标选中

ASP.NETserver控件使用之Reportviewer 报表

1.       Reportviewer 报表 1.1.       Reportviewer控件 注:本教程附2个事例: l  演练:在本地处理模式下将数据库数据源与 ReportViewer Web server控件一起使用 l  演练:在本地处理模式下将业务对象数据源与 ReportViewer Web server控件一起使用 假设您已经对ReportViewer控件基础知识比較了解,能够直接參阅事例. 1.1.1.                 简单介绍 Microsoft Vis

Xtrareport 报表的一些属性及控件

报表结构 整个报表是由多个绑定带区组成,绑定带区如下: 绑定带区 说明 TopMarginBand 每个页面上面都显示的空白(天头),在PageHeaderBand或者ReportHeaderBand上面 ReportHeaderBand 在报表起始位置(报表头), 此带区被设计用于显示某些概述信息,例如报表的封面. PageHeaderBand 在每个页面的上方(页眉),在TopMarginBand或者ReportHeaderBand下方 GroupHeaderBand 在每组的起始位置,或者

控件案例

虽然不打算用控件了,但是关于控件的经验还是保留下来吧,万一呢?未来还很长... 下拉菜单: <asp:DropDownList ID="txtVisitWayB" runat="server"> <asp:ListItem Value="-1">===请选择=== </asp:ListItem> </asp:DropDownList> 局部刷新: <form runat="serve