如何在VS2005 中使用rdlc switch实现web打印功能?

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
【精品】vs2005中RDLC报表设计(网络资料整理)
下载积分:680
内容提示:vs2005中RDLC报表设计(网络资料整理)
文档格式:DOC|
浏览次数:16|
上传日期: 09:30:48|
文档星级:
该用户还上传了这些文档
【精品】vs2005中RDLC报表设计(网络资料整理)
官方公共微信&&&&&& 最近做的项目需要单据批量打印的功能,优先想到用RDLC来实现。经过Visual Studio几个版本的发展后,RDLC愈发成熟,操作方式也变得简洁,相比vs2005的版本,有质的提升,不过仍有一下几点缺憾:
&&&&& & 1、内置函数不支持C#,只支持Visual Basic
&&&&&&& 2、不支持Asp.net MVC,支持webForm和winForm
&&&&&&& 3、VS2008及以下版本开发WebForm时,不建议使用RDLC,因为生成的报表样式不兼容chrome浏览器。
&&&&&&& 如果未来时间充裕,我将会把RDLC一系列应用实例分享出来。闲话少说,言归正传。
二、测试数据
create table fcwOrder
id int identity(1,1),
ordercode varchar(50),--订单号
ordername varchar(50),--订单名字
opername varchar(50),--经手人
comname varchar(50),--客户名称
createtime datetime,--订单日期
barcode image--条形码,预留字段。
--订单明细
create table fcwOrderDetails
id int identity(1,1),
ordercode varchar(50),--订单号
procode varchar(50),--产品编号
proname varchar(50),--产品名称
promodel varchar(50),--产品型号
pronum int --订购数量
--测试数据
insert into fcwOrder(ordercode,ordername,opername,comname,createtime) values('order001','订单一','张三一','客户一','')
insert into fcwOrder(ordercode,ordername,opername,comname,createtime) values('order002','订单二','张三二','客户二','')
insert into fcwOrder(ordercode,ordername,opername,comname,createtime) values('order003','订单三','张三三','客户三','')
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order001','pro0011','产品一一','长1宽1',11)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order001','pro0012','产品一二','长1宽2',12)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order002','pro0021','产品二一','长2宽1',21)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order002','pro0022','产品二二','长2宽2',22)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order003','pro0031','产品三一','长3宽1',31)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order003','pro0032','产品三二','长3宽2',32)
insert into fcwOrderDetails(ordercode,procode,proname,promodel,pronum) values('order003','pro0033','产品三三','长3宽3',33)
--统一订单明细
select o.id as orderid,o.ordercode,o.opername,o.name,o.createtime,o.barcode,
&&&&& d.id as detailid,d.ordercode detailordercode,d.procode,d.proname,d.promodel,d.pronum
&&&&& from fcwOrder o
&&&&& join fcwOrderDetails d on d.ordercode=o.ordercode
三、编码实现
& 提示:本案例是属于winform程序,原理上操作RDLC部分后台代码也可用于webform&&&&& 开发环境:Visual Studio 2012 , Sql server 2012
1、【创建项目】打开VS2012,新建项目Fcw.RDLC
2、【创建数据集】右击项目“Fcw.RDLC”,添加新建项,选择数据集,创建数据集Order.xsd
3、【配置数据集】将工具箱中的TableAdapter拖入到数据集设计器中,配置数据库连接后,并将以下语句装载到表中:
select o.id as orderid,o.ordercode,o.opername,o.name,o.createtime,o.barcode,
&&&&& d.id as detailid,d.ordercode detailordercode,d.procode,d.proname,d.promodel,d.pronum
&&&&& from fcwOrder o
&&&&& join fcwOrderDetails d on d.ordercode=o.ordercode
右键单击已经生成的TableAdapter,选择属性,将名称改为Order
4、【新建报表】,选择Fcw.RDLC,右键选择添加新建项,选择报表。创建order.rdlc
5、【配置报表数据源】双击打开Order.RDLC设计器,在报表数据源,点击新建---》数据集,选择已有的数据源或新建新数据源,名称也改成Order
6、【设计报表】将工具箱中的列表拖拽到rdlc界面设计器上,并指定列表的数据名称Order
6.1 选中列表,在行组中,用鼠标右键点击详细信息,添加组,父组。分组依据为ordercode (订单编号),右击ordercode分组,选中在组的各实例之间分页,作用是每个订单页显示。
6.2 删除自动添加的列ordercode及 详细信息组
6.3,依次拖入 表、文本框、图像,在报表数据源,新建参数。根据需求界面完成设计。
注:列表内默认包含矩形,也可以根据需要手动添加。矩形可实现循环数据内的排版。满足个性化需求。
7【winform代码】.winform 拖入ListBox,Button,ReportViewer等步骤,不再赘述。
ListBox的selectMode设为 MultiSimple,
为ReportView设定RDLC文件
重要代码:
private void Form1_Load(object sender, EventArgs e)
&&&&&&&&&&& //绑定list_order
&&&&&&&&&&& DataTable dtorder = SQLHelper.GetDataTable(@"select o.id as orderid,o.ordercode,o.opername,o.name,o.createtime,o.barcode& from fcwOrder o");
&&&&&&&&&&& list_order.DataSource =
&&&&&&&&&&& list_order.DisplayMember = "ordercode";
&&&&&&&&&&& list_order.ValueMember = "ordername";
&&&&&&& private void button1_Click(object sender, EventArgs e)
&&&&&&&&&&& StringBuilder sb = new StringBuilder();
&&&&&&&&&&& //构造多选的order列表
&&&&&&&&&&& foreach (object obj in list_order.SelectedItems)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& DataRowView drv = (DataRowView)
&&&&&&&&&&&&&&& if(drv!=null)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& sb.Append("'" + drv.Row["ordercode"].ToString() + "',");
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&&&&&& //为report绑定数据源
&&&&&&&&&&& if (sb.ToString().Length & 2)
&&&&&&&&&&& {
string orderwhere = sb.ToString().Substring(0, sb.ToString().Length - 1);
&&&&&&&&&&&&&&& string strsql = @"select o.id as orderid,o.ordercode,o.opername,o.name,o.createtime,o.barcode,
&&&&& d.id as detailid,d.ordercode detailordercode,d.procode,d.proname,d.promodel,d.pronum
&&&&& from fcwOrder o
&&&&& join fcwOrderDetails d on d.ordercode=o.ordercode where o.ordercode in (" + orderwhere + ")";
&&&&&&&&&&&&&&& DataTable dtorder2 = SQLHelper.GetDataTable(strsql);
&&&&&&&&&&&&&&& reportViewer1.LocalReport.DataSources.Clear();
&&&&&&&&&&&&&&& reportViewer1.LocalReport.EnableExternalImages =
&&&&&&&&&&&&&&& reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("Order",dtorder2));
&&&&&&&&&&&&&&& reportViewer1.LocalReport.SetParameters(new ReportParameter("para_Total",dtorder2.Rows.Count.ToString()));
&&&&&&&&&&&&&&& reportViewer1.RefreshReport();
&&&&&&&&&&& }
8、【最终效果】
本篇文章从基础开始搭建一个基本的单据批量打印应用,涉及数据集的使用,RLDC中列表、表、文本框、矩形、参数、组分页的使用方式。
RDLC中表用来实现类似表格数据之类的需求,包含分组统计汇总、分页等。
文本框用来实现单个字段的显示或者用来处理部分线条等。
参数用来接收固定值。
矩形用来方便排版,当其他方式设计和最终呈现出现布局不同时,可用矩形把布局错乱的部分包围起来。
列表,可以用来处理循环中的单条数据下的各种样式排版。实现自定义需求。传送门:批量打印单据批量单据打印&&在vs2005中的ReportViewer(RDLC报表)中利用直接打印功能,在vs2005利用ReportViewer2008.
因为水晶报表授权价格的问题,计划在新的项目中利用Visual Studio 2005中自带的MicosoftReportViewer,但VS2005中的MicosoftReportViewer在博览的时候不能直接打印,只能先导出为Excel可能PDF文件再利用Excel或PDFReader里面的打印告终打印,极其之不得体,也不懂得M$怎么想的,不过在VS2008其中M$终于想通了,将MicosoftReportViewer作了顺次升级,升级为9.0,新加了一个ActiveX插件,穿越这个插件告终了在网页上直接打印。
万一您的项目是基于VS2005的,但又想利用VS2008其中的MicosoftReportViewer功能以告终直接打印,就必需在公布网站之前修正Web.config文件中的ReportViewer控件版本尔后再公布。 那么为什么是在公布之前修正版本,然后颁告示终尔后又必需改归来呢?可能大家会感受很独到,那是因为我穿越无数的措施想直接把VS中的8.0版本控件直接替换成9.0不获胜尔后才不得已想到的措施,因为未曾措施轮换掉VS2005中的控件,因而万一我们在开发时万一web.config中的版本是9.0,那么就会有控件版本抵触讹谬。翔实做法请参看如下的措施:1. 下载Microsoft Report Viewer Redistributable 2008并安装http://om/Downloads/details.aspx?displaylang=zh-cn&FamilyID=cc96c246-61e5-4d9e-bb5f-416d75a1b9ef另外提醒一下,利用这个控件无须要安装Framework 3.5,因为它切实上只是多了一个ActiveX插件,并没利于用到Framework 3.5中的任何功能。2. 找到web.config中的如下几行,将版本号全副从8.0.0.0改为9.0.0.0&system.web& &httpHandlers& &add path=&Reserved.ReportViewerWebControl.axd& verb=&*& type=&Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a& validate=&false& /&&/httpHandlers& &compilation debug=&true&& &assemblies& &add assembly=&Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A&/& &add assembly=&mon, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A&/&&/assemblies& &buildProviders& &add extension=&.rdlc& type=&Microsoft.Reporting.RdlBuildProvider, mon, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&/& &/buildProviders& &/compilation&&/system.web&3. 将VS2005为每个版面增加的符号登记解释去掉&%@ Register Assembly=&Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a& Namespace=&Microsoft.Reporting.WebForms& TagPrefix=&rsweb& %&这里有点小问题,万一我们在asp.net中引用ReportViewer控件之前未曾在Web.config中增加符号登记解释,VS会在每个放置了ReportViewer控件的aspx文件中举行控件登记,因而良好的措施是在Web.config中统一举行登记,以免每次都要去剔除aspx文件中的登记解释 &pages& &controls&&add tagPrefix=&rsweb& namespace=&Microsoft.Reporting.WebForms& assembly=&Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&/& &/controls& &/pages&4.告终所有修正尔后再编译公布网站,必需当心的是定然要在公布之前修正,公布尔后再修正web.config是不行的。5.常见讹谬报表察看器 Web 控件 HTTP 处理过程尚未在利用过程的 web.config 文件中登记。请将 &add verb=&*& path=&Reserved.ReportViewerWebControl.axd& type = &Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a& /& 增加到 web.config 文件的 system.web/httpHandlers 局部。 揭示这个讹谬的起因是凡是在VS2005中对插入了报表的aspx文件举行了编辑,VS就会积极将刚才我们改过的版本号改回8.0.0.0,再改归来就好了,不过这么改来改去也繁琐,良好的措施是利用在3步中提到的措施,对控件举行统一登记。原文地址:/sl198012/blog/item/05045baf53cb.html代码审查&由同志们寻找代码中的讹谬&所觉察的讹谬与在测验中所觉察的讹谬不同,
请各位遵纪守法并注意语言文明VS2005中的RDLC报表-五星文库
免费文档下载
VS2005中的RDLC报表
导读:用什么做报表?,Microsoft似乎并不容忍在自己的超级工具中竟然没有报表工具,我把它的报表称为RDLC报表,SQLServerReportingServices中已经提供了一种被称为报表定,Microsoft提供了针对这种报表的设计器,并提供了在WinForm和WebForm中使用这种报表的能力,Microsoft将这种报表的后缀定为RDLC,这种报表的易用性和可定制性让我们完全有理由放弃
VS .NET开发中,用什么做报表?
可能的回答是Crystal Report,自.NET“紧密”集成Crystal Report后,这可能是开发人员比较单一的选择。但是,这种集成似乎并不非常紧密,网络上充斥着关于使用Crystal Report的抱怨,太复杂也许是其最为令人诟病的地方,自定义性比较差也不能为程序员们所容忍。
当然,必须承认Crystal Report的功能还是非常强大的,被Business Object收购以后,商业职能的成分也在逐渐增加,也形成了一定规模的用户群。
Visual Studio .NET进入2005版本以后,Crystal Report与IDE的结合更“紧密”了,至少我们看不到那个讨厌的注册窗口了。但是,Microsoft似乎并不容忍在自己的超级工具中竟然没有报表工具,于是Report Viewer Control出现了,我把它的报表称为RDLC报表。
在VS .NET 2005之前,SQL Server Reporting Services中已经提供了一种被称为报表定义语言(Report Definition Language, RDL)的语言;在VS .NET 2005中,Microsoft提供了针对这种报表的设计器,并提供了在WinForm和WebForm中使用这种报表的能力。Microsoft将这种报表的后缀定为RDLC,RDL仍然是Report Definition Language的缩写,那么C代表什么呢?C代表Client-side processing,凸显了它的客户端处理能力。
这种报表的易用性和可定制性让我们完全有理由放弃Crystal Report,让我们来看看它的强大功能吧:
1、简单易用的控件,特别是Table控件,非常方便字段在报表上的排列;
2、灵活的可定制性,用XML来描述一个报表相关的一切,不用说了吧?
3、高度可编程性,在你的项目中,甚至不需要有一个报表文件,通过代码就可以实现报表生成、预览和打印等一系列操作;
4、支持DrillThrough数据钻取功能;
5、导出的Excel文件格式非常完美,任何其它报表在这方面都不能与之比拟,而且并不需要安装Excel;
需要说明的是,现在关于VS. NET 2005中的Report Viewer Control的内容非常少,我只能按照自己的理解来说一些东西,这其中肯定会有一些偏差,欢迎各位的批评指正。另外,我所涉及的内容都是关于LocalReport的,对于ServerReport没有进行研究。
下面我们主要分析一下GotReportViewer
上的几个经典例子,我们可以从中看到ReportViewer Control的强大功能:
1、Web Log Analyzer
这是一个比较典型的OLAP应用,我们可以看到RDLC报表强大的Chart和
Navigation功能。当然了,例子中解析W3C标准日志文件的代码也非常有借鉴意义。这个Starter Kit在我的随笔
/archive//320280.html中曾经提到过,不再详述。
展示如何使用子报表显示主记录的详细信息,这种应用很像Access中的子报表功能。主要使用SubreportProcessing事件为子报表提供数据。
3、钻取报表
钻取报表是通过设置Navigation(HyperLink)和Parameters来实现的,通常在OLAP应用程序中很有用。
4、具有子报表的钻取报表
这个例子实现的功能类似Excel中数据透视表(Pivot Table)的功能,在一个复杂的交叉表中可以进行时间和商品两个维度的向下钻取。这在别的报表中恐怕是很难实现的。如图所示,
5、引用外部代码块
此示例演示从另外一个类Util中读取函数返回值到报表中:首先,使用LocalReport的AddTrustedCodeModuleInCurrentAppDomain方法允许Util类中的方法在Report Viewer中执行,然后在报表中使用TextBox控件的Value节点调用Util中的静态方法Factorial在报表中显示其返回值。
另外一个相关的示例基本上与此相同,只不过在Util类中访问一个文本文件并将该文本文件中的字符显示在报表中
6、导出到Excel
RDLC报表导出到Excel中的效果非常好,曾经看到另外一个报表设计器(好像就是Crystal Report)导出为Excel文件后的效果非常差,单元格根本不对齐,用户无法在其基础上进行二次操作,而RDLC报表导出的Excel文件就没有这个缺点,而且基本上完全保留了原报表设置的格式。如图所示,
可以直接使用Report Viewer控件自带的按钮生成Excel文件,也可以使用如下代码来完成操作:
Microsot.Reporting.WinForms.Warning[] W
string[] strStreamI
string strMimeT
string strE
string strFileNameE
byte[] bytes = this.rptViewer.LocalReport.Render(&Excel&, null, out strMimeType, out strEncoding, out strFileNameExtension, out strStreamIds, out Warnings);
strFilePath = @&D:\report.xls&;
using (System.IO.FileStream fs = new FileStream(strFilePath, FileMode.Create))
fs.Write(bytes, 0, bytes.Length);
对于LocalReport的Render方法,以后的随笔中将进行详细阐述。
7、交互排序
在RDLC报表的众多交互功能中,这个功能是比较新颖的,终端用户可以通过报表中列标题上的图标进行数据的排序,而预览及打印的效果完全取决于用户的排序。[此处好像有一个Bug,即对数据进行一种排序后的预览效果会保持不变,除非再次开启这个应用程序并重新排序。]而这一切不需要在代码中做任何操作,只需要在报表定义文件中添加&UserSort&节并指定相应的SortExpression和SortExpressionScope。
8、RSS新闻阅读器
用ReportViewer实现RSS新闻阅读器?是的!如图所示,
包含总结汇报、IT计算机、外语学习、办公文档、文档下载、资格考试、教学研究、专业文献、计划方案、人文社科、word文档以及VS2005中的RDLC报表等内容。本文共13页
相关内容搜索

我要回帖

更多关于 rdlc switch 的文章

 

随机推荐