C利用MSReportingServices生成报表

上传人:小** 文档编号:175324190 上传时间:2022-12-19 格式:DOC 页数:13 大小:642KB
收藏 版权申诉 举报 下载
C利用MSReportingServices生成报表_第1页
第1页 / 共13页
C利用MSReportingServices生成报表_第2页
第2页 / 共13页
C利用MSReportingServices生成报表_第3页
第3页 / 共13页
资源描述:

《C利用MSReportingServices生成报表》由会员分享,可在线阅读,更多相关《C利用MSReportingServices生成报表(13页珍藏版)》请在装配图网上搜索。

1、C#利用MSReportingServices生成报表C#也能用在报表中,少见吧,一起来看看!关于编写报表,职场中的人相信都会有所感慨,一份整洁、优美的报表会为你在上司面前增色不少,甚至加薪:)大家都喜欢加薪,对吧?在本文中,将向大家介绍怎样利用MSReportingServices2005来创建一份报表,并用一个C#小程序来生成它。本文假定读者已对VisualStudio2005IDE有了初步的了解,并能用C#编写代码,懂不懂MSReportingServices都对理解本文没有关系,当然了,之前写过类似的报表,将有助于你更快地上手。好了,卷起袖子,准备开始吧!请看图1,这份报表有多复杂?猜

2、猜它需要多少时间完成?就复杂而言,它只是一份简单的、从NorthWind-Products(SQLServer2000)中提取出来的报表;就时间而言,相信不会花你一整个小时吧。图1F面,我们开始创建报表,首先要编写一个生成报表的C#小程序。第一步:创建一个Windows应用程序选择文件菜单,新建工程,从工程类型中选择C#,从右方对话框中选择Windows应用程序;在名称栏中,最好用一个表明程序用途的名字;在位置栏中,写明你想要保存的目录。完成之后,工程中会有一个Forml,我们就从对它的窗体设计器开始讲解。像下面这样修改Form1的属性,当然也可以依个人喜好修改其他的属性Forml.Text=

3、MSReportingServicesl0lwithSmartClientForml.Size=750,300第二步:为窗体(Form)添加报表查看器(ReportViewer)什么是报表查看器,就像看DVD碟时需要一部DVD播放机一样,我们需要一个报表查看器来预览报表。对初写报表的人来说,报表查看器可以说是赋予了报表生命,它不仅可预览输出,还可帮助将报表信息生成各种格式(PDF或Excel等等),打印出来更不在话下。请按如下步骤在Forml上放置好报表查看器控件:依次找到工具箱(ToolBox)数据(Data)报表查看器(Reportviewer),并把它拖到Forml上。这会创建一个名为r

4、eportViewerl新的实例。通过设置reportViewer1.Dock=Fill,报表查看器将会填充窗体的整个区域,以显示报表。在完成第一步与第二步之后,工程看起来应该如图2所示:图2第三步:为工程添加数据集(DataSet)数据集是伴随报表查看器而来的,它保存并提供从数据源而来的原始数据,我们便可对这些原始数据进行处理或在C#程序中输出。请依照如下步骤添加数据集:从解决方案资源浏览器中选择添加新项目数据集,将其名称DataSet1修改dsProduct,并单击添加按钮完成。添加一个数据表到新创建的数据集中。数据表实质上是用来加载报表数据的,在设计报表时,将会用到DataSet/Dat

5、aTable中的相关信息。以下为添加数据表到数据集(dsProduct)中:从解决方案资源浏览器中双击dsProduct,将会打开设计视图,右键单击并选择添加一数据表。接着,单击表头修改名称为dtProductList,如图3:图3接下来开始为数据表(dtProductList)添加列,此时的设计视图应该如图4所示。右键单击dtProductList并选择添加列(Column)图4重复以上步骤添加以下列:ProductName(String)QuantityPerUnit(String)UnitPrice(Double)UnitsInStock(Double)UnitValue(Double)

6、:一个基于UnitsInStock*UnitPrice的计算域在添加列时,默认为String数据类型,添加完之后请转到属性窗口,修改相应的列为Double类型。请看图5,现在的数据表看上去应该就像这样子了。同时,你也可查看属性窗口来修改数据类型。PropertiesUnitPriceColumnDatdTyp已DateTim已阿匚讨已DefaultvalueExpressionMaxLengthNameNullValueReadonlyUnique:ProductNameQuantityPerUnitUnitPriceUnitsInStockUnitValueAllowDBNullAutril

7、ncrernentAutoln匚r已merits已已匚I0AutoIncrementStep1CaptionUnitPri匚已System.StringSystem.ByteSystem.CharSystem.Dat已TimESystem.DecimalSystem.DoubleSystem.Guid5ystem.Intl6System.Int32System.Int64System.SByteSystem.Single图5第四步:为工程添加报表到目前为止,我们已经创建了工程,添加了报表查看器与数据集;现在,是时候创建一份整洁、优美的报表了。需按照以下步骤生成报表(rptProductList

8、.rdlc):从解决方案资源浏览器中选择添加新项目报表,把名称Report1.rdlc修改为rptProductList.rdlc,并单击添加按钮完成。工程可能会像图6这样;而添加完报表之后,就可以开始使用数据集(DataSet)进行设计了。frsWinlOl-MicrosoftVisualStudioFileEditViewProjectBuildDebugDataForrndtReportToolsTestWindow亠勾门l手3寿a_厚V卜Debug亍AnyC;5理E-e-口變跆T口口-b口x日頂dsProductBodvQ阖dtProductList1-Tocreatea-report

9、layout.2DataSource4X./iptProciuttLiEt.rciIr。亡5何口厂dsProdu比疝d*i11LI|aiii2图6无论你是第一次设计报表的新手,或是历经沙场老手,都必须与以下三种最基本的报表区域打交道:页眉(或叫表头)、页脚、表体。一般来说,报表在设计时,就应该有一个腹稿,如多大的纸张、应该怎样排版等等,通常都为信纸大小、纵向排版。当然了,如果能在动手之前,先在纸上画个草图,这样更好。可以回过头来看一下图1,在页眉,已经有了报表名及报表日期,表体中有产品的相关信息列表,而页脚中有页码。那我们就从页眉开始吧。当添加新报表到工程时,默认情况下,在报表设计器中只能看到

10、表体。右键单击报表设计器的表体之外处,选择页眉,这会在报表中添加一个页眉可以随意调整页眉与表体区的高度,请看图7,图7中减少了表体的高度,增加了页眉的高度。图7在报表设计器的工具箱中,你可以看到用于设计报表的各种各样的控件。在我们这个例子中,会用到TextBox、Line和Table控件。现在我们开始设计页眉了。拖动两个TextBox并把它们置于页眉区,TextBox既能显示静态也能显示动态的数据,而Line控件用于把页眉从表体区中分隔出来。控件放置好之后,可以修改它们的属性以显示我们所需的值,例如可以指定一个TextBox为报表标题,而另一个TextBox显示当前日期。选择TextBox之后

11、,可直接在其内输入静态文本。请照以下修改标题TextBox:Value=ProductListColor=Purple而日期TextBox则修改为:Value=RunData:&TodayColor=Purple要注意了,日期TextBox的Value属性以=符号打头,这代表它不是一个简单的静态文本,而是一个表达式,这个表达式是字符串RunDate与VB.NET脚本Today的结果。另外多说一点,你可对报表中所有对象指定任何你想要的名称,一般对大多数控件而言,保持默认名称就好了,此处把标题TextBox的名称(即Name属性)指定为“txtTitle”。参照图8,完成页眉设计之后,应该看起来就

12、像这样子:图8现在是表体了。表体是承载信息的详细区域,是整个报表最重要的部分,而且你也看到了,当添加报表到工程时,表体已经自动添加了,我们只需要在上面放些控件就行了。从传统意义上来说,表体区是用于显示详细数据的(在本例中,为产品信息),并且通常为多行信息,而随着报表上数据的增多,表体区也相应会扩展,但一般来说,报表只会设计为一页(信纸或A4纸大小)。在表体区中,有三种最常用的控件:Table、Matrix、List,在本例中会使用Table控件。在报表设计界面中,拖动并把Table控件放置于表体区中,你会看到,这会生成一张三行三列的表,而中间一列则已被标记为:Header、Detail、Foo

13、ter。当你知道Table控件只不过是一堆TextBox的组合,是不是有点吃惊呢。对了,Talbe中的每个单元(Cell)都与TextBox一样,也就是说,可以在其中输入静态文本,或指定一个动态表达式。在开始设计表体区之前,记得要多添加两列(我们的报表中有5列喔),添加列非常简单,依照以下步骤就行了:1、在表体区中选择Table控件。2、左键单击最右边一列的表头(此处假设你是从右边添加新列的)。3、右键单击表头,并选择“InsertColumntotheRight”(在右边插入列)。现在报表看起来应该像图9了,可以依据列中的数据随意调整列的宽度。图9大家多半也用过Excel或类似的东西吧,可以

14、把Table控件看成是一张迷你工作表,在其中可以选择边框类型、改变任一单元格的字体等等。因此,所需做的就是依之前设想好的格式来设计表格。我们从第一列开始,随后的每一列也一样,单击最上方的单元格并依次输入:表头1:“ProductName”表头2:“Packaging”表头3:“UnitPrice”表头4:“UnitsinStock”表头5:“StockValue”而在接下来的详细数据区(即前面的Detail)中,需要输入表达式,其为dsProduct.dtProductInfo中的列,在此既可以手工输入表达式,也可以从数据源(DataSources)工具箱(见图7左边)中拖放实现。如果想要手工

15、输入,请从数据区的第一列至最后一列,单击单元格并输入:Detail1:=Fields!ProductName.ValueDetail2:=Fields!QuantityPerUnit.ValueDetail3:=Fields!UnitsInStock.ValueDetail4:=Fields!UnitPrice.ValueDetail5:=Fields!UnitsInStock.Value*Fields!UnitPrice.Value请留意Detail5,它是一个对UnitsinStock与UnitValue相乘计算之后的输出。另外提醒一点,如果是拖动列到Table控件中的数据区来实现的,此时

16、如果表头为空,它会自动添加表头。最后,在Table控件的页脚添加一累计栏,选择表体区第4与第5列的页脚单元格,输入:单元格4:“TotalValue:”单元格5:=SUM(Fields!UnitsInStock.Value*Fields!UnitPrice.Value)单击单元格5,这是使用了一个内置的SUM()函数来得到累计的结果。最后只剩下页脚区了,在开始编写一些C#代码之前,还需完成报表的页脚,正如前面添加报表页眉一样,在打开的报表设计器中,右键单击并选择页脚(PageFooter),见图7。拖动一个Line和TextBox控件置于页脚区,并在TextBox中输入以下表达式:Value:

17、=Page:&Globals!PageNumber&/&Globals!TotalPages大家可以看到,此处使用了PageNumber和TotalPages,两者皆为全局变量。现在,报表应该像图10这样了,此处,还改变了一点颜色,把数值类数据右对齐,把Table当作一张Excel工作表好了,可以随意调整为你想要的外观。|0111I111111|2111I111311I14111I111511I16111IPageH已印坦ProductNamePackagingUnits-lnStctckUnitValueStockValue-Fields!ProductName.i=Fi&lds!iQuan

18、tityPerUni=Fields!Unit$lnSt=Field!UnitPrice=Fields!UmtslnStTotalValueSlJM(Fields!Uni1BodyPageFooterProductListT:=RunData:&Today=Page:(SlobaTs!PageNumber:7!LS;GlobalsITotalPags图10快大功告成了!剩下的就是表达式生成器了。表达式生成器是ReportingServices中一个非常强大的工具,正如图11中所见,StockValue是通过SUM函数计算得到的,DateSet中的所有数据都可以由“Fields!”关键字访问。图1

19、1第五步:编写赋予报表生机的C#代码从解决方案资源浏览器中,选择Forml,右键单击并选择查看代码,为Forml_Load添加以下代码:usingSystem.Data.SqlClient;usingMicrosoft.Reporting.WinForms;privatevoidForml_Load(objectsender,EventArgse)/声明连接字符串stringcnString=(local);InitialCatalog=northwind;+UserId=northwind;Password=northwind;/如果使用标准安全属性,请改为以下代码/stringcnStri

20、ng=DataSource=(local);InitialCatalog=northwind;IntegratedSecurity=SSPI;/声明连接、命令对象及其他相关对象SqlConnectionconReport=newSqlConnection(cnString);SqlCommandcmdReport=newSqlCommand();SqlDataReaderdrReport;DataSetdsReport=newdsProduct();try/打开连接conReport.Open();/准备连接对象以把获取的数据放入数据集cmdReport.CommandType=Command

21、Type.Text;cmdReport.Connection=conReport;cmdReport.CommandText=SelectTOP5*FROMProductsOrderByProductName;/从命令对象中读取数据drReport=cmdReport.ExecuteReader();有了ADO.NET,可把读取来的数据直接加载到数据集中dsReport.Tables0.Load(drReport);/关闭读取及连接drReport.Close();conReport.Close();/为查看器提供本地报表数据rpvAbraKaDabra.LocalReport.ReportE

22、mbeddedResource=rsWin101.rptProductList.rdlc;/准备报表数据源ReportDataSourcerds=newReportDataSource();rds.Name=dsProduct_dtProductList;rds.Value=dsReport.Tables0;rpvAbraKaDabra.LocalReport.DataSources.Add(rds);/加载报表查看器rpvAbraKaDabra.RefreshReport();catch(Exceptionex)/显示错误信息MessageBox.Show(ex.Message);finally/检查连接是否仍然打开,如果是,关闭它。if(conReport.State=ConnectionState.Open)conReport.Close();看到这,大家可能会想,为什么在select查询语句中使用了“TOP5”,此处只是作演示的目的,对输出作一限制,以得到如图1中的累计结果。另外,ReportDataSource的Name属性应总为“DataSet_DataTable”。看完之后,你还觉得报表设计很难吗,赶快动手试一下吧。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!