随笔『使用ActiveReport for .net …
来源:互联网 发布:遗传算法的基本流程图 编辑:程序博客网 时间:2024/05/21 08:44
(一)--开始
ActiveReport是.net下的一个出色的报表开发程序,虽然和水晶报表相比,名气不那么大,甚至有很多人不知道它的存在,但是并不妨碍它在.net报表开发中的出色表现,本文将一步一步地介绍如何使用它和VS2005开发.net报表。
1.
你可以从Data Dynamics的网站上下载最新的ActiveReport for .net 2,你可以免费使用,但是在生成的报表最下边有水印,不过不影响报表的整体美观。下载后直接安装就可以了。安装完后会看到开始-程序菜单里的DataDynamics的目录,里面包括了,帮助,例子程序等。
2.
在安装完成后,启动VS2005,会看到启动界面上有ActiveReport的图标,进入后新建一个工程,并且给工程添加新文件,在文件类型中就可以看到ActiveReport文件的图标。给报表文件命名为ActiveReport1,确定后会看到项目中有一个ActiveReport1.rpx文件,这个就是报表文件了。
打开文件,就是报表的设计界面,在这里可以看到三部分,PageHeader(表头),Detail(明细),PageFooter(表尾)。打开工具箱,给Detail部分随便添加一个Label。
下面就要显示这个报表了,在Form上添加一个Viewer控件,如果工具箱里没有,可以通过配置工具箱来找到它。Viewer添加完后,在Form中写代码:
ActiveReports1 rpt = new ActiveReports1();
然后F5运行,就可以看到在Viewer控件中显示报表了。
要注意的是,项目名称不要命名为ActiveReport,否则会提示找不到ActiveReport.rpx文件。
3.
Web方式的报表开发方式和winform的差不多,不同的是,web方式下需要作一些配置,配置过程不再累述,可以在帮助里搜索“ManuallyConfiguring Web Samples”,按照里面的步骤对IIS作配置。
要注意的是,如果使用的是VS2005,那么可以不作配置,只要在创建Web项目的时候文件位置选项设置为“文件系统”就可以直接运行了。还要注意的是,在web方式下,需要在web.config文件中添加下面这段:
<httpHandlers>
<addverb="*"path="*.rpx"type="DataDynamics.ActiveReports.Web.Handlers.RpxHandler,ActiveReports.Web, Version=4.2.1.1238, Culture=neutral,PublicKeyToken=cc4967777c49a3ff"/>
<addverb="*"path="*.ActiveReport"type="DataDynamics.ActiveReports.Web.Handlers.CompiledReportHandler,ActiveReports.Web, Version=4.2.1.1238, Culture=neutral,PublicKeyToken=cc4967777c49a3ff"/>
<addverb="*"path="*.ArCacheItem"type="DataDynamics.ActiveReports.Web.Handlers.WebCacheAccessHandler,ActiveReports.Web, Version=4.2.1.1238, Culture=neutral,PublicKeyToken=cc4967777c49a3ff"/>
</httpHandlers>
如果是VS2005,系统会自动添加。
接下来的就和winform下的差不多了,不同的是,要在解决方案中新增一个“类库”项目,在这个项目中新建报表文件,然后在Web项目中添加对类库项目的引用,然后在页面上添加WebViewer控件,然后编写代码:
this.WebViewer1.Report = new YourNamespace.ActiveReports1();
然后运行界面,就可以看到在WebViewer中加载的报表了。
你可以通过WebViewer的ViewType属性来设置在页面上如何显示,例如,如果选择了AcrobatReader,就会给报表生成一个PDF文档在页面上嵌入显示。
下次我们将演示如何在报表上加载和显示数据
(二)--绑定数据源
在上篇随笔中写了一个使用ActiveReport for .net的最简单的例子,本文将演示在ActiveReport中如何绑定数据源
1.
2.
3.
使用DataSet:
this.chartingTableTableAdapte
rpt.DataSource = this.dataSet1;
rpt.DataMember = this.dataSet1.ChartingTable.TableName;
rpt.Run();
this.viewer1.Document = rpt.Document;
使用DataView:
this.chartingTableTableAdapte
DataView dv = this.dataSet1.ChartingTable.DefaultView; ;
rpt.DataSource = dv;
dv.RowFilter = "project ='1'";
rpt.Run();
this.viewer1.Document = rpt.Document;
4.
在报表设计器的Detail部分的头部,有一个数据库一样的小图标,点击它后会出现向导,按照向导一步步连接数据库,并定义查询就可以了。
上面演示的是使用数据集作为数据源进行绑定,但是实际项目中经常会用到使用对象集合作为数据源显示,下一次我们将演示如何在报表上显示一个对象集合中的数据。
(三)--显示对象集合中的数据
将通过一些示例代码继续演示如何绑定对象集合以及如何从对象集合或列表中提取数据。
1.
我们可以自己定义一个Collection,从IList继承,并使其中的每个对象都是一个实体,例如:
Customer和CustomerCollection。然后给ActiveReport报表的DataSource直接赋值为CustomerCollection的实例就可以了。这种绑定方法在ActiveReportfor .net自带的例子里有完整的演示。
2.
在这里要用到两个事件:DataInitialize和FetchData。
DataInitialize用来定义字段列表,获取数据等工作,FetchData用来指定每个字段的值。
我们简单定义一个Customer类
public class Customer
再给报表定义一个Customer数组,用来保存要显示的数据,比如:
public Customer[] customers;
还需要一个值来保存当前记录的索引:private int index =0;
接下来在DataInitialize中定义报表有那些字段:
this.Fields.Add("Name");
然后在FetchData事件中添加以下代码:
if (this.index >= this.customers.Length )
这段代码的含义就是将Customer数组中的每个Customer实例的Name和Address属性值赋给报表的Name和Address字段。
代码中的第一个if分支是判断是否已经加载到了最后一条数据,如果是,设置eArgs.EOF为ture,并返回,否则继续加载下一条数据。
然后我们可以将要显示的数据放在Customers数组中,并启动显示报表:
Customer[] customers = new Customer[2];