这次我来说说WebForm下报表的显示类型及数据的导出.
ActiveReport报表查看器在有4种显示方式,我们选中报表查看器控件,找到其ViewType属性,就可以看到其包含的几种显示方式.如图:
简单说明一下这几种查看方式的的区别:HtmlViewer方式,为在转化为html的查看的方式,报表上方带工具条;RawHtml方式,同样是转化为html查看的方式,与HtmlViewer方式的区别是报表上方不带工具条;ActivexViewer方式为以Activex插件的方式查看,基本上等同于window程序中的报表样式;AcrobatReader方式,则以pdf文件的形式查看报表.
需要说明的是,当以ActivexViewer方式查看时,要求用户的客户端下载相应的ActiveX插件,同时在服务器端要提供插件的安装包文件.插件的安装包文件名为arview2.cab,这个安装包文件可以在安装完ActiveReport后软件自带的Web示例项目中找到,如果你安装ActiveReport时选的是默认安装,则可以到这个目录下找到arview2.cab文件:C:\Inetpub\wwwroot\Data Dynamics\ActiveReports for .NET 3.0\Samples\VS2005\CSharp\ArWebSampleStdCs3,把这个安装包文件加入到你的项目中,如果你的显示报表的web页面和arview2.cab文件不在同一目录下,则要设置一下报表查看器控件的codebase属性.比如在我的项目中arview2.cab文件放在了网站项目的根目录,而显示报表的web页面在二级目录,则我的报表查看器的codebase属性如下图设置就好了:
如果想以AcrobatReader方式查看,则要求用户的机器上安装有pdf阅读器(比如AcrobatReader),所以如果你想默认以这种方式显示报表给用户,建议你提醒用户安装pdf阅读器,最好在本页提供下载的链接.
如果仅仅是能显示报表,那ActiveReport也就没有什么值得使用的了.因为我们通过webform页面,通过自己的设计也能作出类似的报表.所以数据导出的功能是几乎所有报表控件都提供的,ActiveReport也不例外.它共提供了6种导出方式:可以导出为html,text,pdf,rtf,tiff,xls格式的文件.由于我这次的项目中仅要求导出为pdf和excel文件,所以就简单说说如何导出为这两种文件,另外几种文件的导出方式大同小异,大家可以自己试验一下.
最开始看网上的文章说想导出这几种文件时,先要把对应的几个导出控件添加到工具箱上.我试了一下,在winform上可以添加到工具箱上,在webform下是不能将那几种导出控件添加到工具箱上的.正确的做法是在你的网站项目中添加引用,在添加引用对话框中可以找到如下图的相关程序集:
当我们想导出为pdf文件时,只要选中上图中的组件,点确定就可以添加引用了.如果想导出为另几种文件格式,添加对应的组件引用就可以了.
添加完引用后还需要在你的代码文件的顶部引入相应的命名空间.比如我这里要导出为pdf和excel两种文件格式,则引入如下命名空间:
using DataDynamics.ActiveReports.Export.Xls;
using DataDynamics.ActiveReports.Export.Pdf;
如果你想导出为其他的格式,别忘了引入对应的命名空间哦.
下边就是最关键的数据导出代码了:
//导出为pdf文件
System.IO.MemoryStream m_stream = new System.IO.MemoryStream();
AdverReport rpt = new AdverReport();
int nADCount = 0;
rpt.DataSource = ADS.GetAdve_ADS_List((int)Session[CoFunction.SESSION_ADVER], ref nADCount);
rpt.Run();
PdfExport pdfExport1 = new PdfExport();
pdfExport1.Export(rpt.Document, m_stream);
m_stream.Position = 0;
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=MyExport.pdf");
Response.BinaryWrite(m_stream.ToArray());
Response.End();
简单说明一下:第一行,我们创建一个内存流,第二行声明一个报表文件类的对象,然后指定报表的数据源,接着就是声明一个PdfExport类的对象,然后就是导出的代码了,应该不难理解吧?
导出为excel的代码类似:
//导出为excel文件
System.IO.MemoryStream m_stream = new System.IO.MemoryStream();
AdverReport rpt = new AdverReport();
rpt.CompanyName = ViewState["CompanyName"].ToString();
int nADCount = 0;
rpt.DataSource = ADS.GetAdve_ADS_List((int)Session[CoFunction.SESSION_ADVER], ref nADCount);
rpt.Run();
XlsExport xlsExport1 = new XlsExport();
xlsExport1.MinColumnWidth = (float)0.5;
xlsExport1.Export(rpt.Document, m_stream);
m_stream.Position = 0;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("content-disposition", "attachment; filename=MyExport.xls");
Response.BinaryWrite(m_stream.ToArray());
Response.End();
没什么好说的了,另外几种格式文件的导出应该也差不多,自己试试吧:)