《经典收藏ReportingService.ppt》由会员分享,可在线阅读,更多相关《经典收藏ReportingService.ppt(67页珍藏版)》请在三一办公上搜索。
1、1,点标签,切换到数据页,点击值中的编辑按钮,单击此按钮,2,点标签,切换到点标签页:,标签上显示 的数据字段,格式化字符串,显示位置,3,点标签,最终结果如下:,4,柱状图,将饼图的图表类型改为柱状图:,5,柱状图,运行结果如下:,6,折线图,将柱状的图表类型改为线图(最好去除三维效果):,7,折线图,运行结果如下:,8,参数,参数化报表,在表格式的报表创建过程中,介绍了创建数据源的方式。其中有一步为输入SQL语句,如果想从外界获取参数影响数据集的数据,必须在SQL语句中加入参数,也可以在已添加的数据库中右击“DataTable”,再点击“配置”菜单项,示例如下:,9,参数化报表,在制作报表
2、时,方式同无参的完全一样,ReportViewer控件关联到报表后会自动生成一个ObjectDataSource对象,该对象获取数据库中的数据,选中该对象,切换到属性页,在属性页中设置如何将参数的值传递给DataSet的Select方法。,由该对象获取数据库中的数据,点击此处设置如何传递参数,10,参数化报表,点击属性页中的“SelectParameters”后的“”按钮后,弹出如下对话框,11,参数化报表,运行结果如下:,在此填入报表的参数值,在按钮的后台代码中加入“this.ReportViewer1.LocalReport.Refresh();”这句,点击此按钮后也会重新刷新报表,填入参
3、数后点击此按钮刷新报表,报表会自动从控件中取值,12,子报表,一个报表可以嵌在另一个报表中,称之为子报表,子报一般放在主报表中,并且从主报表中获取参数进行过滤。以下示例中,主报表为表格报表,子报表为图表,主报表显示员工销售业绩,子报表显示员工各年销售额在总额中所点比例。我们做子报表,将金额拖放到此,将年字段拖放到此,13,子报表,子报表需要设置参数来过滤,点击此菜单设置报表参数,14,子报表,将参数设置好后点击确认,点击添加参数,设置默认值,在此设置参数名和数据类型,提示可以不用设置,15,子报表,设置好参数后,还要设置参数对报表的影响,右击报表,再点击属性子菜单。,最终显示如上,这表示报表的
4、数据会以字段”Employee_Name”的值等于参数的值进行过滤。,16,子报表,子报表设计好后,我们开始设计主报表。,主报表使用的数据集中只有两个字段,一个是员工名,另一个是员工的销售总额,将员工名和销售总额拖放到表格报表中,17,子报表,先拖放“子报表”控件到表格,再设置其属性,18,子报表,到此,主报表和子报表的文件都设计完毕,然后象其它报表一样,在Web窗体上放置一个ReportViewer控件,再将控件关联到主报表的报表文件,但此时有一个问题,关联后,在ReportViewer控件下方会自动生成一个ObjectDataSource控件,该控件用来获取主报表的数据,但没有为子报表生成
5、该控件,因此我们需要手动添加一个该控件作为子报表的数据源。,将该控件拖放到页面,拖放到页面后点击小三角配置数据源,19,子报表,在选择业务对象的下拉框中选择子报表使用的数据集,点击“下一步“后再点击完成。,20,子报表,(注:在后台代码中,首先using命名空间:using Microsoft.Reporting.WebForms;)数据源配置完成后,并没有绑定到子报表,切换到报表Web页面的后台代码,在Page_Load函数中加入以下代码:protected void Page_Load(object sender,EventArgs e)this.ReportViewer1.LocalRe
6、port.SubreportProcessing+=new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);在ReportViewer中有LocalReport属性,表示绑定的报表,报表又有SubreportProcessing事件,该事件在处理每一个子报表时触发。然后在事件的响应函数中再加入以下代码void LocalReport_SubreportProcessing(object sender,SubreportProcessingEventArgs e)ReportDataSource dataSourc
7、e=new ReportDataSource(ChildReport_SaleDetail,this.ObjectDataSource2);e.DataSources.Add(dataSource);以上代码先创建一个报表数据源对象,再将该对象添加到报表的数据源中,在以上事件响应函数中,e.DataSources表示报表的数据源,ReportDataSource对象的构造函数有多个重载版本,该版本需要二个参数,第一个参数“ChildReport_SaleDetail”为数据源名称,第二个参数为页面上查询子报表数据的ObjectDataSource控件。第一个参数名必须正确,否则无法显示报表。获
8、取该名称的方法如下:,21,子报表使用的数据源,其中”chileReport“是数据集的名称,SaleDetail是TableAdapter的名称,获取子报表数据源名称,找到子报表使用的数据源,其中包含了数据集名和DataAdapter名称,将这两个名称用”_“连接后便得到数据源名称,如下图,最终据源名称为”ChildReport_SaleDetail“。,22,点击导出,可以导出到Excel和PDF,子报表,最终显示如下。可以将报表导出到Excel或PDF,但导出时会忽略子报表。,子报表被忽略,23,嵌套报表,为了解决子报表被忽略问题,我们应该尽量不使用子报表,下面我们使用在表格式报表中嵌入
9、图表的方式来实现同上面子报表的相同功能。,将“employee_name”字段拖到表中并以它进行分组,“amout”字段进行汇总,将图表拖入分组行的第三列单元格中,再设置其序列字段为“Sale_year”,数据字段为”amount”,其它设置同普通图表,将详细行和组尾行设为不可见,24,嵌套报表,最终显示如下:和子报表效果完全一样,而且制作更简单,不需要多个数据源,导出后也能正确显示图表的内容。,25,先将字段拖放到表格内,再显示其属性,钻取报表,钻取报表是在希望支持指向其他相关报表的钻取链接时创建的一种报表。通常,钻取报表通过数据与父报表关联。钻取报表和子报表非常类似,但不象子报表一样显示在
10、同一个界面内,而是单独显示。以下将上面的子报表改为钻取报表,子报表部份不就改,主报表如下:,26,切换到“导航”,钻取报表,选择要链接的钻取子报表,点击弹出参数设置对话框,27,设置参数对话框,钻取报表,选择钻取子报表中参数,主报表中要传递给钻取子报表中的数据,28,钻取报表,同子报表一样,也要手动为钻取子报表添加一个ObjectDataSource控件,29,钻取报表,页面的后台代码部份和子报表类似,但事件不同,首先也得在Page_Load中添加事件响应:(注意,该事件是ReportViewer控件的事件)protected void Page_Load(object sender,Even
11、tArgs e)this.ReportViewer1.Drillthrough+=new DrillthroughEventHandler(ReportViewer1_Drillthrough);每一次点击链接将要跳转到钻取子报表时会触发ReportViewer的Drillthrough事件,该事的参数“e”中含有”Report”属性,该属性表示钻取子报表,但它是ServerReport和LocalReport的基类,因为使用的是LocalReport,所以将它转化成LocalReport后再设置它的数据源。void ReportViewer1_Drillthrough(object send
12、er,DrillthroughEventArgs e)ReportDataSource dataSource=new ReportDataSource(ChildReport_SaleDetail,this.ObjectDataSource2);(e.Report as LocalReport).DataSources.Add(dataSource);以上代码中同样创建了一个报表数据源对象,创建方法同子报表完全一样。,30,鼠标移到该列数据上后,会变为“手”的形状,表示该列为链接,点击可查看钻取子报表中的内容,钻取报表,运行后结果如下:,31,服务器报表,微软在Sql Server 2005中
13、提供了一个报表服务器,在服务管理器中可看到该服务,同时以Web务形式公布外部接口,服务器报表和本地报表的主要区别在于报表由独立的引擎解析,报表文件(RDLC)中不仅包含了报表格式的定义,还包含的报表数据的定义。正是因为这个差异,造成了服务器报表的制作和本地报表有一定的不同。下面以示例来演示两者之间的区别。,32,管理页面,服务器报表,安装Reporting Server后,会在IIS中加入两个虚拟目录,一个是ReportingService的Web服务,该服务负责解析报表,另一个为Reporting Service的管理页面。在IIS管理器中可以查看这两个虚拟目录,在安装时可指定名称,如果没有
14、指定默认为“Reports”和”ReportServer”。,Web服务,33,服务器报表,选中管理页面的虚拟目录,管理页面的主页面,34,服务器报表,管理页面的主页面如下:,35,创建服务器报表项目,微软在VS2005中提供了制作服务器报表的设计器,首先打开VS2005,然后新建项目,在新建项目对话框中选择“报表服务器项目”。,36,服务器报表,创建报表项目后,切换到“解决方案管理器”停靠栏,右击报表项目点击属性菜单设置项目属性。,如果服务器上有同名报表,该值为”true”时覆盖服务器上的报表,否则报错,共享数据源在服务器上的目录名,报表在服务器上的目录名,报表Web服务的URL,如果安装时
15、指定了名称按指定的名称填写.,37,添加报表数据源,38,添加报表数据源,连接串,切换到该页设置登录方式,39,添加报表,40,添加报表,41,添加报表,42,钻取报表,43,添加报表,44,添加报表,报表按页面字段分组进行分页,45,添加报表,46,添加报表,47,添加报表,48,报表数据,报表数据的SQL语句,49,报表设计器,为了进行分页,在报表中有一个“列表”报表项,然后再将“表”放在列表中,相关知识请参考前面的“利手列表进行分页”,Employee_Name是列表中的分组字段,50,预览报表,报表可切换到此进行预览,51,部署报表,报表设计好后可以部署到报表服务器中(部署前一定要设置
16、服务器Web Service的URL),52,在报表管理器中查看报表,在报表管理页面的产页上可以看到部署上来的报表目录,点击此目录可查看报表。,报表目录,53,在报表管理器中查看报表,54,在报表管理器中查看报表,55,将服务器报表集成到WEB程序,同本地报表一样,将ReportViewer放在Web页面上,在选择报表时选择“服务器报表”,再填入报表服务器的URL和报表路径(格式为”/报表目录/报表名“)。,56,将服务器报表集成到WEB程序,设置好后查看Web页面,显示如下错误消息,这是因为ReportViewer控件向Web Service请求报表时以NT AUTHORITYNETWORK
17、 SERVICE用户身份登录的,为了不出现这个错误信息,我们需要在”报表管理器“中设置报表的权限。,57,设置报表权限,进入”医药销售报表“目录,先切换到”属性“,再切换到其中的“安全性”,再点击“编辑安全性”,然后在弹出的对话框中点击“确定”。,58,设置报表权限,然后点击“新建角色分配”,将Windows用户设置为报表用户。,59,设置报表权限,在这里输入报表用户名,在这里是:NT AUTHORITYNETWORK SERVICE,在这勾选权限,我们选择浏览者,设置后确定,60,将服务器报表集成到WEB程序,61,参数化报表,本地参数报表其实和报表本身没有关系,而是和数据源控件相关,而服务
18、器报表数据包含在报表中,所以直接和报表相关。制作步骤如下:首先在报表向导中填写查询字符串时,同本地报表一样,加入参数。,62,参数化报表,然后点击“报表”菜单中的“报表参数”子菜单,63,参数化报表,这个界面和本地报表设置子报表的参数一样,当时我们没有设置“提示”的值,这是因为对于了报表来说,参数由父报表传入,提示没有作用。等会我们会看到这个值的作用。,如果在这设置可用值,最后参数会以下拉列表框方式显示,也可以从数据集中查询可用值,64,参数化报表,设置好参数再部署报表,在报表管理器中查看如下:,在此输入员工名再点击右边的“查看报表”,65,参数化报表,将参数报表集成到Web程序后显示如下:,66,服务器报表,服务器报表和本地报表还有其它一些区别:如子报表不用处理“SubreportProcessing”事件;钻取报表不用处理“Drillthrough”事件;服务器报表可以在页面上打印,而本地报表不可以页面打印。,67,谢 谢,