ActiveReport ActiveReport 是.net下的一个出色的报表开发程序,虽然和水晶报表相比,名气不那么大,甚至有很多人不知道它的存在,但是并不妨碍它在.net报表开发中的出色表现. 一. ActiveReports for .net的主要功能介绍 支持ASP.NET-ActiveReports在WebForms应用程序中通过使用ASP.NET 服务器控件来使用。这个控件支持分布式web报表,可使用HTML,ActiveX,.NET 和PDF浏览器。完全代码集成-使用Microsoft Visual Studio.NET编辑器用C#或VB.NET编写报表的代码,非常灵活。报表向导-报表向导帮助您开始创建使用集成设计器来定制的简单报表。设计器-对象模版完全显现的对象模版。允许您动态的建立和修改报表Report Creation API提供了完整的运行时访问报表对象和成员功能。最终用户报表设计器终端用户设计器为您提供了向您应用程序中加入设计器的功能,同时提供了终端用户报表编辑功能。控件的方法和属性能方便的存储和加载报表布局,监测和控制设计环境,并可根据终端用户的需要定制外观。与ASP.NET集成Web浏览器控件为您提供了web上的快速浏览ActiveReports 以及打印功能,并具有ActiveX浏览器和Acrobat Reader 浏览器类型的属性。RPX 文件HTTP处理器为您提供了在web服务器上轻松的放置报表的功能,并可使您的Internet用户采用HTML 或PDF进行浏览,而不需要编写任何代码。编译的报表HTTP处理器提供了直接访问服务器的程序集中编译的ActiveReports,而不需要编写任何ASPX页面。发布-容易部署报表引擎是一个简单处理强名称程序集。程序集可以使用XCopy发布或放置于程序集全局存储器中(GAC)。专业版包括HTTP 处理器和服务器并行web控件,用于ASP.NET 报表。设计器-容易学习与.NET 环境完全集成熟悉的用户界面支持C#和Visual Basic.NET报表将作为您应用程序中的一部分进行编译,以加快处理速度,增强安全性,并且用户可以有选择的分别发布。初学者报表向导和Microsoft Access 报表导入向导设计器拥有第三方控件(图表控件,图像控件等)。数据访问-容易连接包括OLEDB和SqlClient报表数据源包括灵活的xml数据源绑定到Dataset,DataView,DataTable和任何IListSource 控件数据源属性能在运行时修改,生成ad hoc(动态)报表灵活的非绑定数据预览和输出-容易显示支持C#代码小型部署程序集,适用于Internet 上使用TOC/Bookmarks超链接输出过滤文件格式为RTF、PDF、EXCEL、HTML、TIFF 和文本文件。官方网站: 二.注册 下面代码放置在***.exe.config或者Web.config里面: appSettings addkey="DataDynamicsARLic" value="DD-APN-10-C001733,DD-APN-10-C001733,DD-APN-10-C001733,XY6Y7KQBTY12323KJCKJ" / /appSettings 每个方案旋转文件licenses.licx后,重新生成: DataDynamics.ActiveReports.ActiveReport, ActiveReports, Version=1.2.2003.630, Culture=neutral, PublicKeyToken=dbe4120289f9fd8a 右边红线出现,是因为报表超出长度限定,如果那样打印的话,会多带出一张空白纸。 1 Left margin + right margin + printwidth must be less than the paper width 2 While right.margin 1.0 then it will appear 三.使用指南此控件目前的文档很少,参见参考资料,只能自己看SAMPLES或者下载E文文档 汉化ActiveReports 2.0界面 Public Sub Creport(AReport As ActiveReport) '汉化ActiveReport '以下适用2.0 With AReport .ToolBar.Tools.Item(0).Tooltip = "各页目录" .ToolBar.Tools.Item(2).Caption = "打印..." .ToolBar.Tools.Item(2).Tooltip = "打印报表" .ToolBar.Tools.Item(4).Tooltip = "拷贝" .ToolBar.Tools.Item(6).Tooltip = "查找" .ToolBar.Tools.Item(8).Tooltip = "单页显示" .ToolBar.Tools.Item(9).Tooltip = "多页显示" .ToolBar.Tools.Item(11).Tooltip = "缩小" .ToolBar.Tools.Item(12).Tooltip = "放大" .ToolBar.Tools.Item(15).Tooltip = "" .ToolBar.Tools.Item(16).Tooltip = "" .ToolBar.Tools.Item(19).Tooltip = "后退" .ToolBar.Tools.Item(19).Caption = "后退" .ToolBar.Tools.Item(20).Tooltip = "前进" .ToolBar.Tools.Item(20).Caption = "前进" End With End Sub 四.如何发布 ActiveReports for .NET 程序集 有两种部署 ActiveReports 程序集的方法。每种方法根据您的安装方法而定。 如果您正将工程从开发计算机拷贝到您的服务器上,您需要将工程引用中的 ActiveReports 引用设置为 CopyLocal = True。这样 ActiveReports DLL 将在编译工程中的 bin 文件夹中。 如果您正为您的软件制作安装程序,您需要包含 ActiiveReportsDistrib.MSM 文件,该文件将包含在 ActiveReports for .NET 的安装中。例如,该文件可能被安装在C:\Program Files\Data Dynamics\ActiveReports for .NET\Deployment 文件夹中。
我们提供的服务有:成都网站设计、成都网站制作、微信公众号开发、网站优化、网站认证、浉河ssl等。为上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的浉河网站制作公司
关于编写报表,职场中的人相信都会有所感慨,一份整洁、优美的报表会为你在上司面前增色不少,甚至加薪 :) ——大家都喜欢加薪,对吧?在本文中,将向大家介绍怎样利用MS Reporting Services 2005来创建一份报表,并用一个C#小程序来生成它。
本文假定读者已对Visual Studio 2005 IDE有了初步的了解,并能用C#编写代码,懂不懂MS Reporting Services都对理解本文没有关系,当然了,之前写过类似的报表,将有助于你更快地上手。好了,卷起袖子,准备开始吧!
请看图1,这份报表有多复杂?猜猜它需要多少时间完成?就复杂而言,它只是一份简单的、从NorthWind-Products (SQL Server 2000)中提取出来的报表;就时间而言,相信不会花你一整个小时吧。
图1
下面,我们开始创建报表,首先要编写一个生成报表的C#小程序。
第一步:创建一个Windows应用程序
选择文件菜单,新建-工程,从工程类型中选择C#,从右方对话框中选择Windows应用程序;在名称栏中,最好用一个表明程序用途的名字;在位置栏中,写明你想要保存的目录。完成之后,工程中会有一个Form1,我们就从对它的窗体设计器开始讲解。
像下面这样修改Form1的属性,当然也可以依个人喜好修改其他的属性:
Form1.Text = "MS Reporting Services 101 with Smart Client"
Form1.Size = 750, 300
第二步:为窗体(Form)添加报表查看器(Report Viewer)
什么是报表查看器,就像看DVD碟时需要一部DVD播放机一样,我们需要一个报表查看器来预览报表。
对初写报表的人来说,报表查看器可以说是赋予了报表生命,它不仅可预览输出,还可帮助将报表信息生成各种格式(PDF或Excel等等),打印出来更不在话下。
[span] 请按如下步骤在Form1上放置好报表查看器控件:
依次找到工具箱(ToolBox)-数据(Data)-报表查看器(ReportViewer),并把它拖到Form1上。这会创建一个名为reportViewer1新的实例。
通过设置reportViewer1.Dock = Fill,报表查看器将会填充窗体的整个区域,以显示报表。
在完成第一步与第二步之后,工程看起来应该如图2所示:
图2
第三步:为工程添加数据集(DataSet)
数据集是伴随报表查看器而来的,它保存并提供从数据源而来的原始数据,我们便可对这些原始数据进行处理或在C#程序中输出。
请依照如下步骤添加数据集:
从解决方案资源浏览器中选择添加-新项目-数据集,将其名称DataSet1修改dsProduct,并单击添加按钮完成。
添加一个数据表到新创建的数据集中。数据表实质上是用来加载报表数据的,在设计报表时,将会用到DataSet/DataTable中的相关信息。
以下为添加数据表到数据集(dsProduct)中:
从解决方案资源浏览器中双击dsProduct,将会打开设计视图,右键单击并选择添加-数据表。接着,单击表头修改名称为dtProductList,如图3:
图3
接下来开始为数据表(dtProductList)添加列,此时的设计视图应该如图4所示。右键单击dtProductList并选择添加——列(Column)。
图4
重复以上步骤添加以下列:
ProductName (String)
QuantityPerUnit (String)
UnitPrice (Double)
UnitsInStock (Double)
UnitValue (Double):一个基于UnitsInStock * UnitPrice的计算域
在添加列时,默认为String数据类型,添加完之后请转到属性窗口,修改相应的列为Double类型。
请看图5,现在的数据表看上去应该就像这样子了。同时,你也可查看属性窗口来修改数据类型。
图5
第四步:为工程添加报表
到目前为止,我们已经创建了工程,添加了报表查看器与数据集;现在,是时候创建一份整洁、优美的报表了。
需按照以下步骤生成报表(rptProductList.rdlc):
从解决方案资源浏览器中选择添加-新项目-报表,把名称Report1.rdlc修改为rptProductList.rdlc,并单击添加按钮完成。
工程可能会像图6这样;而添加完报表之后,就可以开始使用数据集(DataSet)进行设计了。
图6
无论你是第一次设计报表的新手,或是历经沙场老手,都必须与以下三种最基本的报表区域打交道:页眉(或叫表头)、页脚、表体。一般来说,报表在设计时,就应该有一个腹稿,如多大的纸张、应该怎样排版等等,通常都为信纸大小、纵向排版。当然了,如果能在动手之前,先在纸上画个草图,这样更好。可以回过头来看一下图1,在页眉,已经有了报表名及报表日期,表体中有产品的相关信息列表,而页脚中有页码。
那我们就从页眉开始吧。当添加新报表到工程时,默认情况下,在报表设计器中只能看到表体。右键单击报表设计器的表体之外处,选择页眉,这会在报表中添加一个页眉,可以随意调整页眉与表体区的高度,请看图7,图7中减少了表体的高度,增加了页眉的高度。
图7
在报表设计器的工具箱中,你可以看到用于设计报表的各种各样的控件。在我们这个例子中,会用到TextBox、Line和Table控件。现在我们开始设计页眉了。拖动两个TextBox并把它们置于页眉区,TextBox既能显示静态也能显示动态的数据,而Line控件用于把页眉从表体区中分隔出来。控件放置好之后,可以修改它们的属性以显示我们所需的值,例如可以指定一个TextBox为报表标题,而另一个TextBox显示当前日期。选择TextBox之后,可直接在其内输入静态文本。
请照以下修改标题TextBox:
Value = "Product List"
Color = Purple
而日期TextBox则修改为:
Value = "Run Data: " Today
Color = Purple
[span] 要注意了,日期TextBox的Value属性以"="符号打头,这代表它不是一个简单的静态文本,而是一个表达式,这个表达式是字符串"Run Date"与VB.NET脚本Today的结果。
另外多说一点,你可对报表中所有对象指定任何你想要的名称,一般对大多数控件而言,保持默认名称就好了,此处把标题TextBox的名称(即Name属性)指定为“txtTitle”。
参照图8,完成页眉设计之后,应该看起来就像这样子:
图8
现在是表体了。表体是承载信息的详细区域,是整个报表最重要的部分,而且你也看到了,当添加报表到工程时,表体已经自动添加了,我们只需要在上面放些控件就行了。
从传统意义上来说,表体区是用于显示详细数据的(在本例中,为产品信息),并且通常为多行信息,而随着报表上数据的增多,表体区也相应会扩展,但一般来说,报表只会设计为一页(信纸或A4纸大小)。
在表体区中,有三种最常用的控件:Table、Matrix、List,在本例中会使用Table控件。在报表设计界面中,拖动并把Table控件放置于表体区中,你会看到,这会生成一张三行三列的表,而中间一列则已被标记为:Header、Detail、Footer。
当你知道Table控件只不过是一堆TextBox的组合,是不是有点吃惊呢。对了,Talbe中的每个单元(Cell)都与TextBox一样,也就是说,可以在其中输入静态文本,或指定一个动态表达式。
在开始设计表体区之前,记得要多添加两列(我们的报表中有5列喔),添加列非常简单,依照以下步骤就行了:
1、 在表体区中选择Table控件。
2、 左键单击最右边一列的表头(此处假设你是从右边添加新列的)。
3、 右键单击表头,并选择“Insert Column to the Right”(在右边插入列)。
现在报表看起来应该像图9了,可以依据列中的数据随意调整列的宽度。
图9
大家多半也用过Excel或类似的东西吧,可以把Table控件看成是一张迷你工作表,在其中可以选择边框类型、改变任一单元格的字体等等。因此,所需做的就是依之前设想好的格式来设计表格。
我们从第一列开始,随后的每一列也一样,单击最上方的单元格并依次输入:
表头1:“Product Name”
表头2:“Packaging”
表头3:“Unit Price”
表头4:“Units in Stock”
表头5:“Stock Value”
而在接下来的详细数据区(即前面的Detail)中,需要输入表达式,其为dsProduct.dtProductInfo中的列,在此既可以手工输入表达式,也可以从数据源(Data Sources)工具箱(见图7左边)中拖放实现。
如果想要手工输入,请从数据区的第一列至最后一列,单击单元格并输入:
Detail 1: "=Fields!ProductName.Value"
Detail 2: "=Fields!QuantityPerUnit.Value"
Detail 3: "=Fields!UnitsInStock.Value"
Detail 4: "=Fields!UnitPrice.Value"
Detail 5: "=Fields!UnitsInStock.Value * Fields!UnitPrice.Value"
请留意Detail 5,它是一个对Units in Stock与Unit Value相乘计算之后的输出。另外提醒一点,如果是拖动列到Table控件中的数据区来实现的,此时如果表头为空,它会自动添加表头。
最后,在Table控件的页脚添加一累计栏,选择表体区第4与第5列的页脚单元格,输入:
单元格4:“Total Value:”
单元格5:"=SUM(Fields!UnitsInStock.Value * Fields!UnitPrice.Value)"
单击单元格5,这是使用了一个内置的SUM()函数来得到累计的结果。
最后只剩下页脚区了,在开始编写一些C#代码之前,还需完成报表的页脚,正如前面添加报表页眉一样,在打开的报表设计器中,右键单击并选择页脚(Page Footer),见图7。
拖动一个Line和TextBox控件置于页脚区,并在TextBox中输入以下表达式:
Value: ="Page: " Globals!PageNumber "/" Globals!TotalPages
大家可以看到,此处使用了PageNumber和TotalPages,两 者皆为全局变量。
现在,报表应该像图10这样了,此处,还改变了一点颜色,把数值类数据右对齐,把Table当作一张Excel工作表好了,可以随意调整为你想要的外观。
图10
快大功告成了!剩下的就是表达式生成器了。表达式生成器是Reporting Services中一个非常强大的工具,正如图11中所见,Stock Value是通过SUM函数计算得到的,DateSet中的所有数据都可以由“Fields!”关键字访问。
图11
第五步:编写赋予报表生机的C#代码
从解决方案资源浏览器中,选择Form1,右键单击并选择查看代码,为Form1_Load添加以下代码:
using System.Data.SqlClient;
using Microsoft.Reporting.WinForms;
private void Form1_Load(object sender, EventArgs e)
{
//声明连接字符串
string cnString = @"(local); Initial Catalog=northwind;"+"User Id=northwind;Password=northwind";
//如果使用标准安全属性,请改为以下代码
//string cnString = @"Data Source=(local);Initial Catalog=northwind; Integrated Security=SSPI";
//声明连接、命令对象及其他相关对象
SqlConnection conReport = new SqlConnection(cnString);
SqlCommand cmdReport = new SqlCommand();
SqlDataReader drReport;
DataSet dsReport = new dsProduct();
try
{
//打开连接
conReport.Open();
//准备连接对象以把获取的数据放入数据集
cmdReport.CommandType = CommandType.Text;
cmdReport.Connection = conReport;
cmdReport.CommandText = "Select TOP 5 * FROM Products Order By ProductName";
//从命令对象中读取数据
drReport = cmdReport.ExecuteReader();
//有了ADO.NET,可把读取来的数据直接加载到数据集中
dsReport.Tables[0].Load(drReport);
//关闭读取及连接
drReport.Close();
conReport.Close();
//为查看器提供本地报表数据
rpvAbraKaDabra.LocalReport.ReportEmbeddedResource =
"rsWin101.rptProductList.rdlc";
//准备报表数据源
ReportDataSource rds = new ReportDataSource();
rds.Name = "dsProduct_dtProductList";
rds.Value = dsReport.Tables[0];
rpvAbraKaDabra.LocalReport.DataSources.Add(rds);
//加载报表查看器
rpvAbraKaDabra.RefreshReport();
}
catch (Exception ex)
{
//显示错误信息
MessageBox.Show(ex.Message);
}
finally
{
//检查连接是否仍然打开,如果是,关闭它。
if (conReport.State == ConnectionState.Open)
{
conReport.Close();
}
}
}
看到这,大家可能会想,为什么在select查询语句中使用了“TOP 5”,此处只是作演示的目的,对输出作一限制,以得到如图1中的累计结果。另外,ReportDataSource的Name属性应总为“DataSet_DataTable”。
湖北新蓝海是一家专注于网络营销 网络推广的领头企业 ,已为武汉健民、华工激光、江西仁和等多家知名企业提供网络营销外包服务。详情请到各大搜索引擎中搜索“湖北新蓝海”
Grid++Report是一款C/S与B/S集成报表工具,功能全面易学易用。C/S开发适用于VB.NET,C#,VB,VC,Delphi,BCB,VFP,易语言等。B/S开发适用于ASP.NET,ASP,PHP,JSP等,支持所有WEB服务器。开发C/S报表与B/S报表共享相同的开发知识与设计资源。提供独有的报表查询显示功能,让报表查询显示、打印、打印预览及数据导出等功能集成一体化实现。轻松实现通用报表、表格报表、动态报表、多层表头、票据与发票套打、交叉表、表中表及各种特殊报表等。提供详尽帮助文档与各种编程平台下的丰富例子,安装中包括可直接运行例子程序,安装后即刻体验此报表工具。包括简体中文版、繁体中文版与英文版。经过数年的发展,已经被多家有影响力的通用软件厂商采用,其用户遍布各行各业,已经成为用户受众面最广的国产报表开发工具。
这样的效果用FineReport报表实现起来非常容易,只要在主报表的模板上,在需要放置子报表的单元格上右击选择“单元格元素|子报表”即插入了子报表,然后绑定子报表所需的数据源,实现让子报表的内容显示在主报表上,然后将整个cpt文件插入vb.net中。
Visual Basic通用报表设计小结
本文对vb设计报表的方法作了一个小结,大家都知道,在VB平台下制作报表大致有两种选择:使用VB自带的Data Report控件和借助第三方软件。其中第三方软件比较著名的就是MS Excel和Seagate公司的CrystalReporter,以下就这三个方案进行详细的讨论。
1. Data Report控件
1.1 Data Report控件使用方法
由于是VB自带的控件,所以使用相对比较方便。使用方法是:首先在"工程"菜单下面选择"添加Data report"选项,这样Data Report控件就选入到了应用程序。
使用Data report的情况大多数采用数据绑定的模式,也就是将此控件与数据库的数据表绑定起来以便可以不用编写代码就轻松完成报表的设计。要使用数据绑定就必须要指定数据源,这里的数据源不是数据控件而是数据环境(Data Environment),选择"工程"菜单下面选择"添加Data Environment"选项就可以将数据环境添加进应用程序中。数据环境有两个重要的属性:Connection 和Command属性,前者是连接指定的数据库,后者连接指定的数据表,一旦这两者都设置成功之后,就可以把数据环境作为数据源了。只需要把Data report的DataSource属性设置为前面的数据环境对象以及把DataMember设置为数据环境对象的Command对象即可。
1.2 Data Report控件界面元素
完成了Data report控件的数据绑定工作之后就可以直接控制报表的制作与显示了。这里首先熟悉一下Data report控件的显示界面:
Data report控件一共有5个区组成,分别是报表头、页面头、细节区、页面注脚和报表注脚。报表头和报表注脚是用分别用于整个报表的最上部和最下部,它们将出现于整个报表的每一页,可以放置一些报表名称,时间之类的固定文本;页面头和页面注脚只能出现在当前页的最上部和最下部,也就是说它只能出现在当前页中,不出现在其他页面中,可以放置随页面变化的一些量比如页码等;而细节区就是用来进行实际显示的区域,它是我们最为关心的区域,通过在此区域内放置显示控件可以控制报表的实际显示输出。这里介绍一下放置文本框控件的使用方法,其实在绑定情况下只需要设置其DataMember和Datafield即可,前者用来指定数据表,可以设置为前面数据环境对象的Command对象,后者是指定数据段,即绑定的数据库的指定字段。这样不需要编写任何代码就可以实现报表的显示工作。
1.3 Data Report控件的打印功能
对于报表的打印可以直接使用Data report自带的打印功能,即可以实现简易的报表打印。不过为了实现比较复杂的打印功能,也可以通过程序控制的方法来进行。这里只是给出一个实现思路:首先需要制作一个按钮控件来显示"打印设置"的窗口,通过这个窗口用户可以设置打印的相关的参数,然后在实现打印的子模块中使用VB内嵌的printer对象来实现真实的打印,该对象能够对打印的当前位置进行定位,而且对打印的字体等参数进行控制,所以结合"打印设置"窗口可以实现类似于word里面的打印功能。
2.MS Excel
说起报表设计应用程序,无意微软的Excel是一支独秀,MS Excel就是用来进行表格和报表设计用的应用程序,它具有优秀的方格控制和宏代码定制功能。所以如果在设计自己的应用程序的时候能够结合到Excel的话,那么你的应用程序就应该是相当的完善了,因为无论是编辑还是打印功能,Excel都提供了很完美的解决方案,所以你的应用程序所要做的事情就是实现程序和Excel通讯即可。
事实上,可以使用VBscript可以将VB与Excel两者连接起来。以下就简要介绍在VB下开发基于Excel的编程思路。
在VB中处理Excel的对象大致分为五个:Application对象、WorkBook对象、WorkSheet对象、Range对象以及Cell对象。它们的功能分别如下:
Application---------用来指代整个应用程序。
WorkBook----------表示工作簿对象
WorkSheet---------表示工作表对象,注意,一个工作簿可以包含多个工作表,它们就类似于多文档中的框架窗口和里面的单个视图一样。
Range-------------表示工作表中的某个区域范围对象,特殊情况下也可以只代表一个Cell。
Cell---------------表示特定工作表的一个单元格对象。这个对象的使用频率是最高的。
清楚了以上的五个对象的应用范围,那么使用它们就很简单了,不过在使用这些对象之前,首先需要对它们进行声明。方法是在"工程"的"引用"对话框之下选择"Microsoft Excel9.0 Object Library",这样就将整个Excel对象库就引入到程序中来了。
下面举一个示例,其实现的功能是打开一个工作簿。
Function OpenBook(strFilePath As String) As Boolean
' This procedure checks to see if the workbook
' specified in the strFilePath argument is open.
' If it is open, the workbook is activated. If it is
' not open, the procedure opens it.
Dim wkbCurrent As Excel.Workbook
Dim strBookName As String
On Error GoTo OpenBook_Err
' Determine the name portion of the strFilePath argument.
strBookName = NameFromPath(strFilePath)
If Len(strBookName) = 0 Then Exit Function
If Workbooks.Count 0 Then
For Each wkbCurrent In Workbooks
If UCase$(wkbCurrent.Name) = UCase$(strBookName) Then
wkbCurrent.Activate
Exit Function
End If
Next wkbCurrent
End If
Workbooks.Open strBookName
OpenBook = True
OpenBook_End:
Exit Function
OpenBook_Err:
OpenBook = False
Resume OpenBook_End
End Function
3.Crystal Reporter(水晶报表)
做为一个优秀的报表软件,水晶报表是实际应用中最多的方案。在这一节里主要介绍一下水晶报表的定制和显示,打印功能的实现。
首先要区分Crystal Reports插件程序和Crystal Reports控件。前者主要用来创建报表模板,后者主要是用来在程序中显示和打印报表,这两者的分工决定了它们程序中的功能的不同。
其中Crystal Reports的插件程序可以从Seagate公司的官方网站上下载最新的测试版本。
3.1 Crystal Reports插件程序的使用
选择"外接程序"菜单的"报表设计器"选项,则VB将执行Crystal Reports Pro插件应用程序。在Crystal Reports Pro里选择"新建报表"图标,可以选择8标准模板和一个自定义的模板来开始报表工程。
整个水晶报表的使用跟第一节的Data Report的使用很类似。首先需要给报表选择数据源,(即数据库),然后就可以在报表中添加、删除、修改字段以及为记录分组,可以利用水晶报表创建很多具有自定义风格的报表。由于本身Crystal Reports插件程序就是一个功能强大的报表设计软件,这里就不能一一的讲解了,有兴趣可以参考程序自带的帮助文档。
3.2 Crystal Reports控件的背景知识
Crystal Reports Pro还提供一个报表生成模块,该模块可以连接到并访问VB应用程序,VB程序员不需花费大量时间写自己的代码就可再应用程序中添加复杂的报表生成及输出功能。
Crystal Reports引擎是一个动态链接库,它可以使应用程序访问并具有同Crystal Reports 一样强大的报表输出功能。应用程序是通过Crystal Reports ActiveX控件来访问引擎。再编译时应用程序同报表引擎链接,以给应用程序添加了生成报表的功能。
当程序使用Crystal Reports ActiveX控件时,可以通过再设计时设置Crystal对象属性或者再运行时改变对象属性,来建立应用程序和Crystal Reports之间的连接。通过Crystal控件的属性可以指定:
响应应用程序某个事件的输出报表的名字。
报表的目标位置(预览窗口、磁盘文件或者电子邮件等)。
想要打印的份数(如果报表提交给打印机的话)。
输出文件的信息。
预览窗口的大小及位置信息(如果报表在预览窗口中显示时)。
选择公式信息(如果在报表中限制记录的话)。
排序信息。
其他相关的属性。
这里要注意一点的是,Crystal控件必须在由Crystal Reports Pro创建的报表中使用,而试图在VB应用程序里引用之前,必须首先创建报表。
3.3 Crystal Reports控件的使用
了解了Crystal Reports控件的功能,那么就可以使用它了。首先通过"工程"的"部件"选项里面选择"Crystal Reports Control",那么VB的工具箱里面就添加了Crystal Reports控件了。
注意,对于Crystal Reports控件的最重要的属性就是ReportFileName了,把它设置为前面已经在Crystal Reports Pro里定制好的报表模板的文件路径。那么只需要调用控件的PrintReport方法就可以将报表显示出来了。
相对于Data Report控件来说,Crystal Reports控件的功能更加的完善,报表预览,打印,编辑修改等功能都很完善,所以在实际的报表应用设计方案中,使用Crystal Reports的相对较多。然而Crystal Reports控件也有它的局限性,即它不能在运行时创建自定义的窗口。可以使用控件的数据绑定属性来创建数据绑定报表,但是报表本身的格式都是由Crystal Reports控件内部进行处理的。一般说来,Crystal Reports控件不提供在程序中对报表字段级的访问。这一缺陷可以通过设计出足够多的报表来弥补。
4.其他方法
除了通过上述的三种方法来实现报表设计以外,当然也可以直接利用Win32 API来进行直接进行设计,这种方式是最为灵活也是最为繁琐的方式,因为所有的编辑、修改、打印等功能都是由程序控制,所以一般情况下不会使用这样的方式来处理,这里就不介绍了。
5.小结
报表设计是程序员经常要遇到的问题,本文主要介绍目前主流的报表设计方案,由于所涉及到的知识点比较多,限于篇幅,在这里只是作了简要的介绍,希望可以起到抛砖引玉的作用。