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