技术开发 频道

ASP.NET 3.5下基于Crystal Reports的报表编程

  【IT168 专稿】在本系列文章中,让我们一起来探讨在ASP.NET 3.5环境下如何借助于Crystal Reports并使用SQL Server 2008示例数据库AdventureWorks创建一个发票报表应用程序。我将向您详细地介绍创建数据库连接的过程,并详细描述报表的页眉与页脚的构建步骤,最后,我们要创建一个具有一对多关联关系的分组数据发票报表。文章中还将详细讨论Crystal Report Viewer的使用方法以及如何在ASP.NET页面中使用对象模型(Object Model)以PDF形式观察报表。

  一、简介

  Visual Studio 2008的发行中提供了一个免费版本的Crystal Reports。借助于这个工具,你可以创建具有专业水准外观的桌面应用和ASP.NET 3.5 Web报表应用程序。在本文中,我们要借助于Crystal Reports并使用SQL Server 2008示例数据库AdventureWorks中的数据创建一个发票报表应用程序。请注意,测试本文源码的前面是你需要下载AdventureWorks示例数据库。

  图1展示了本文拟构建的发票报表应用程序的运行时快照。

图1 发票报表应用程序的运行时快照

  在报表构造中,我们将详细讨论如何使用主/从式记录,创建公式类型的域,在报表中使用变量,直接使用SQL Server数据库中的表格,使用数据库专家(Database Expert)创建表格间的连接,创建分组报表,以及使用节管理专家(Section Expert)来动态格式化分组和创建总结类型的域等。

  二、创建实例解决方案

  请遵循如下步骤创建一个初步的实例方案,并加入Crystal Reports支持。

  (1)启动Visual Studio 2008。

  (2)从菜单下选择“文件”—“新建网站”创建一个典型的ASP.NET 3.5网站,并命名为AdventureWorksReports,选择Visual C#作为内置支持语言。

  通过以上步骤,Visual Studio 2008将创建一个新的网站并添加一个默认页面Default.aspx和网站配置文件web.config。

  接下来,我们要在AdventureWorksReports网站中添加一个Crystal Report文件。请遵循如下步骤:

  (1)从解决方案资源管理器中右击上述示例网站。

  (2)从随后的弹出菜单中选择“添加新项…”。

  (3)从“添加新项”对话框中选择Crystal Report模板。

  (4)更改报告的名称为Invoice.rpt,并选择内置支持语言为Visual C#。

  (5)最后,点击“添加”按钮,如图2所示。

图2 添加一个Crystal Report文件

  通过以上步骤,Visual Studio会自动把这个Crystal Report文件添加到示例网站,并自动打开Crystal Reports Gallery对话框。注意,此时系统很可能会提示你进行产品注册,如果这是你第一次使用Crystal Reports的话(如图3所示)。

图3 提示用户进行Crystal Report注册的对话框

  一旦出现“Crystal Reports Gallery”对话框,你就可以在其中选择你需要的选项,然后单击“OK”按钮(如图4所示)。

图4 “Crystal Reports Gallery”初始对话框

  此后,系统会自动打开报告文件Invoice.rpt(如图5所示)。接下来,你便可以根据需要对之进行修改了。

图5  系统自动打开报告文件Invoice.rpt界面(注意左边工具栏中内容)

  

  三、创建与数据库的连接

  设计报表的第一步是创建到AdventureWorks数据库的连接并导入你需要的表和视图。在本文示例中,我们假定您已经下载并运行安装了SQL Server 2008示例数据库AdventureWorks。

  接下来,请遵循如下步骤进行操作:

  (1)右击字段管理器(Field Explorer)中的Database节点。然后,从弹出式菜单中选择“Database Expert…”,启动数据库专家对话框。

  (2)本示例报表中,我们将直接使用OLE DB连接到数据库。为了创建到数据库的连接,单击数据库专家对话框中的“Create New Connection”节点(如图6所示)。

图6  选择数据库专家对话框中的“Create New Connection”节点

  (3)双击节点“OLE DB (ADO)”,将显示一个OLE DB对话框,允许你选择你的AdventureWorks数据库。

  (4)从OLE DB对话框中的提供程序列表中选择“SQL Native Client”选项(如图7所示)。

图7  选择“SQL Native Client”选项

  (5)在“OLE DB (ADO)”对话框中输入(或从下拉列表框中选择)你的机器中的SQL Server 2008数据库服务器的名字。注意,在本例中我们基于Windows系统安全性连接,所以没有提供用户名与密码。

  (7)从Database下拉列表框中选择AdventureWorks数据库(如图8所示)。

图8   建立到AdventureWorks数据库的连接

  【重要说明】最好不要使用AdventureWorks2008数据库,因为这个数据库在Person.Address表格中使用了geography类型,而这种数据类型是水晶报表所无法识别的。

  

  (8)一旦你选择了AdventureWorks数据库,单击“Next”按钮,然后单击“Finish” 按钮。

  通过以上步骤,你的SQL Server数据库服务器及数据库应当会出现在OLE DB (ADO)节点下,如图9所示。

图9  SQL Server数据库服务器及数据库应当会出现在OLE DB (ADO)节点下

  (9)展开AdventureWorks节点,你会看到数据库中的模式定义列表。注意到,每一个模块下都有两个节点—Tables和Views。进一步展开这些节点,便可以观察到表格及视图。

  (10)接下来,我们要选择报表中需要的表格及视图。为此,首先展开Person模式下的Tables节点。单击Contact表格并单击“>”按钮把此表格移动到右边的已选择表格列表中。之后,针对Production.Product,Sales.SalesOrderDetail和Sales.SalesOrderHeader表格进行同样的操作,如图10所示。

图10  选择报表中需要的表格

  (11)注意到,表格Sales.SalesOrderHeader提供了两个地址字段(addr1和addr2)。一个对应于订单地址,一个对应于货运地址。每一个都是表格Person.Address的一个外键。为此,我们不得不针对地址表格的两个外键添加两个副本—我们可以使用别名技巧来进行区别。现在,把表格Person.Address也添加到右边的已选择表格列表中。

  (12)右击已选择表格列表中的Address表格,从弹出菜单中选择“Rename”,把表格名字更改为AddressBillTo并按回车键。注意到,Crystal会把所有命名改为全部小写。

  (13)现在,再次把表格Person.Address添加到右边的已选择表格列表中,这次把名字更改为AddressShipTo。

  (14)注意到,表格Person.Address有一个到表格Person.StateProvince的外键。因此,我们还需要把表格Person.StateProvince连续两次添加到右边的已选择表格列表中,并分别区别命名为StateProvinceBillTo和StateProvinceShipTo。

  (15)至此,我们已经选定了要定义其间关系的表格。在确定关系这一点上,Crystal做了大量的工作。但尽管如此,它也不会全自动化地按我们的要求处理。为此,我们还要单击选项卡“Links”进一步手工配置几个表格关系。

  (16)单击选项卡“Links”会以图表方式展示各表格。为方便起见,你可以把表格拖放得足够观察到所有表格间的关系为止(如图11所示)。

图11  选项卡“Links”以图表方式展示各表格及关联关系

  (17)上面众多表格中,表格SalesOrderHeader是我们提供数据的主要表格。注意到,Crystal已经为我们自动创建了下面表格之间的关联关系:SalesOrderHeader.SalesOrderId关联到SalesOrderDetail.SalesOrderId,SalesOrderHeader.ContactId关联到Contact.ContactId,SalesOrderHeader.BillToAddressId关联到AddressBillTo.AddressId,AddressBillTo.StateProvinceId关联到StateProvinceBillTo.StateProvinceId。关联关系是通过连接线表示的。如果你没有看到这些关联线,你可以很容易地通过点击外键字段并拖动到主键字段的方式来创建这些关联关系。

  (18)在本示例中,你还需要手动创建下面几个关联关系:SalesOrderDetail.ProductId关联到Product.ProductId,SalesOrderHeader.ShipToAddressId关联到ShipToAddress.AddressID,ShipToAddress.StateProvinceId关联到StateProvinceShipTo.StateProvinceId。通过拖动方式可以很容易创建这些关联关系。例如,单击SalesOrderDetail.ProductId字段,然后拖动这个字段到Product.ProductId字段上面即可。顺便说一下,如果你需要创建一个外部连接,你可以双击这些关联线,然后根据需要把连接形式更改为Left,Right或者Full Outer Join类型的连接。

  (19)最后,单击“确定”按钮彻底退出数据库专家对话框(如图12所示)。

图12  创建完所有关联关系后的选项卡“Links”内容

  返回到Visual Studio 2008。双击“Database Fields”节点后,你会观察到上面所有添加的表格。进一步单击每一个表格便可以看到其中的每一个字段,如图13所示。

图13  创建完数据库连接后在工具栏中观察到的内容(局部)

  四、小结

  在本篇中,我们详细地描述了创建示例网站工程与相应的数据库连接的具体步骤。其中,实现数据库连接并准确实现其中数据表格间的关联关系是非常重要的。在下一篇(第二篇)中,我们将具体展开使用水晶报表创建报表的页眉的讨论。

下载文章内清晰版图片http://download.itpub.net/html/2009/1013/2433200910131042508258.shtml

系列文章索引:

ASP.NET 3.5下基于Crystal Reports的报表编程

ASP.NET下基于水晶报表编程的创建报表页眉

ASP.NET下基于水晶报表编程的分组报表

0
相关文章