SQL2005报表服务教程(1).docx_第1页
SQL2005报表服务教程(1).docx_第2页
SQL2005报表服务教程(1).docx_第3页
SQL2005报表服务教程(1).docx_第4页
SQL2005报表服务教程(1).docx_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL2005报表服务教程(1)医手/2010-03-24如果你的SQL Server 2005是完全安装的,那么你很容易找到官方的教程。当然,本教程不是官方教程的克隆版。什么是RDL,什么是RDLC?Report Definition Language Client报表定义语言客户端服务端、客户端相对于报表服务器而言。*.rdl是用于部署在报表服务器上的。 *.rdlc是不需要报表服务器支持的。说白了就是需要你自己写个报表服务器。如果是你自己写的报表服务器,你当然知道数据要从哪来获得。但微软写的报表服务器是不会知道的。所以rdl要包含数据连接和数据查询的信息。rdlc则没有这些信息。SQL Server 2005 Reporting Services在安装SQL Server 2005时要选上才会有。报表服务的一些URL使用“Reporting Services 配置”将可以看到报表服务的两个虚拟目录:默认它们的访问路径分别是:报表服务器:http:/localhost/ReportServer/报表管理器:http:/localhost/Reports/顺便说一下后面会说的报表生成器的路径:http:/localhost/ReportServer/ReportBuilder/ReportBuilder.application第一个报表这个例子我们用VS2008来创建基于Web的 rdlc。先创建一个Web项目。为项目添加新建项,是一个数据集。连接到数据库AdventureWorks。连接时请使用SQL Server身份验证。因为你不会让IIS的访问者也使用Windows身份验证。这是一个示例数据库,在安装SQL Server 2005时你要特意选择才会有。 把表“Product”拖到设计区。全部保存,关闭数据集设计。再次为项目添加新建项, 这次是大家关心的报表。点击菜单的,数据 - 显示数据源,打开“网站数据源”面板。 表格从工具箱拖个表控件过来,官方的说法不叫控件,叫报表项。注意表头、表尾、详细信息的行标签的图标(我乱说的,不知官方叫它什么)。行标签和列标签交叉处的绿框是我画上去的,点击它可以让你选中表。选中表没有直观的方法。你也可以在属性面板选择表名来选中表。从网站数据源拖一些字段到表的详细信息行。表头的文字将会自动填写。选中表格,查看表格的属性。此时DataSetName属性已经有值了。在编程的时候需要用到这个值。调整一下列宽,插入一些列。再拖入一些字段到详细信息行。这些列依次是:ProductID、ProductNumber、Name、Color、StandardCost、ModifiedDate。把表头的英文改成中文会舒服些。选中表头和详细信息,点击工具栏的居中。求和选中零售价的表尾对应的单元格。点右键,选择“表达式”。常见函数 - 聚合 里有个Sum函数,双击它就会出现在表达式里。字段中有StandardCost,双击它也会出现在表达式里。表达式只支持VB.NET语法。再在产品颜色对应的表尾的单元格写上“合计:”两个字,让合计的两个单元格右对齐。rdlc的设计就先到这。下面转到Default.aspx页。Web页的代码在页面的设计界面,拖一个MicrosoftReportViewer进来。在项目中首次使用这个控件时,一定要在设计界面中拖。不然就不会往Web.config加一些必要的乱七八糟的东西。可以在源代码或属性面板设置这个控件的宽为620,高为500。其实我是不习惯直接在设计界面通过拖拉来改变大小。在代码页,添加下面的代码。只要你一行行看,应该很容易理解每句话的意思。using System.Data;using Microsoft.Reporting.WebForms;protected void Page_Load(object sender, EventArgs e) DataTable table = new ProductDSTableAdapters.ProductTableAdapter().GetData(); LocalReport report = ReportViewer1.LocalReport; report.ReportPath = Report1.rdlc; report.DataSources.Add(new ReportDataSource(ProductDS_Product, table);下面是运行后,在浏览器上查看的效果:在最后一页的最后一行还能看到对“零售价”的合计。生成操作我只是想让你尽早看到效果,好有点成就感。其实这个项目发布到IIS上是不能运行的。因为Report1.rdlc嵌入到dll里面去了。嵌入到dll里面也不是不可以访问它,只是以后要改报表就很麻烦了。可以在VS2008中选中Report1.rdlc文件,设置它的属性:输出目录是指bin目录,所以默认地不复制就可以了。生成操作则需要改成“内容”。这样发布到IIS就能运行了。在数据源筛选数据价格为0的产品看着还真是不舒服。在数据集ProductDS的Product表的ProductTableAdapter上按右键,选择“配置”。加一个Where子句“where StandardCost0”。然后点击“完成”即可。这时再运行,就看不到价格为0的产品了。不过价格和日期的格式还要调整一下。数据显示格式在零售价的详细信息单元格点右键,选择属性。在格式选项卡的格式代码中输入“C2”。C2的含义你可以在IE中输入地址:ms-help:/MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_fxfund/html/580e57eb-ac47-4ffd-bccd-3a1637c2f467.htm来查阅。给“修改日期”字段类似地添加格式代码“yyyy-MM-dd”。 再让“零售价”字段右对齐。此时运行查看就比较OK了。还可以让它更花俏些。文本格式与IIF选中表头的所有单元格,通过工具栏的一些按钮来设置颜色为白色,背景为DimGray,字体加粗:选中详细信息的所有单元格,通过属性面板来设置背景色,选择“表达式”:让表达式看起来是这个样子:=iif(RowNumber(ProductDS_Product) mod 2 = 0, #769ae0, #eeeeaa)RowNumber在“常见函数 - 杂项”里面将表尾合并成只有两个单元格,都是右对齐。将“零售价”字段也设为右对齐。 将“零售价”合计的“格式代码”也设为“C2”。选中表的所有单元格,在属性面板设置“BorderStyle”为“Solid”。把表头拉高些,在属性面板设置“VerticalAlign”为“Middle”。运行的效果应该是这样的:在报表中筛选数据有些产品是没有颜色的,如果只想选出有颜色的,可以选中表,在表边框上右键属性。如上图一样设置筛选器的条件。顺便说一下,如果表达式不是“=”号开头,则认为所填写的所有内容都是字符串。所以值是“=false”而不是直接“false”。页眉页脚默认报表是只有主体,没有页眉页脚的。在主体以外的灰色背景处右键,可以切换是否显示页眉页脚。依然是上图,点击属性,将打开报表属性。将可以设置页眉页脚在什么时候显示。下面是报表最终完工的设计界面。页眉中添加了两个文本框。Globals!ReportName是报表的文件名(不包括扩展名)。引用文本框ReportItems!ProductID.value中ReportItems是需要手工拼写的。ReportItems!ProductID就是指报表中Name为“ProductID”的控件。这个控件是表详细信息中的产品ID单元格中的文本框。这个文本框的ID号是在拖动字段时自动产生的。页脚中的文本框的文本设置为右对齐。纸张大小另外要说的是,在报表属性的布局选项卡,可以设置页面大小和页面边距。默认地页宽 - 左边距 - 右连距 = 16厘米所以可以看到上图的主体右边界线刚好在刻度16。如果主体超出了宽面内容宽度,打印出来一定是非常难看的。在Web页面看到的效果与打印出来的效果往往有很大差异。运行时通过导出为PDF文件,可以看出打印出来的效果。运行结果:报表参数如果想筛选客户指定的价格以上的产品,那么就需要用到报表参数。添加一个报表参数“Price”,像下图一样设置。再为表添加一个筛选器:CDbl是转换为Double类型的意思。在“常见函数 - 转换”。此时运行将看不出加了报表参数。如果是rdl在报表服务器,就会多出一个让用户输入参数的面板来。rdlc嘛,就自己写这个面板吧。下面的代码设置了报表参数。/设置报表参数值List list = new List();list.Add(new ReportParameter(Price, 1000);report.SetParameters(list);/导出报表时,DisplayName 将用作默认文件名。report.DisplayName = 第一个报表;导出报表时的文件名report.DisplayName的作用如下图所示:其实DisplayName还有一个作用,以后再说。第二个报表(子报表)接下来讲子报表。把Report1复制一份为Report2。再新建一个报表Report3。让Report2的表格的每一行都显示Report3。而Report3则显示对应行的产品图片。子报表的效率是非常低的。所以这个例子是很不恰当的。举这个例子纯粹是为了说明子报表是怎样用的。先把Report3设计得简单些,只有一个文本框。我们再来修改Report2。删除页眉中的最后一个ID文本框。先拆分合计单元格,再把合计单元格右移一格。删除ID列。再次合并合计单元。把产品编号列拉宽一些,使表格右边界刚好到达主体右边界。把“产品编号”改为“图片”。删除“产品编号”的详细信息单元格,再拖一个矩形进去。把详细信息行拉高一些。再拖个子报表控件到刚才的矩形里面。调整子报表控件的大小,使它刚好充满矩形。点击矩形里面时,第一次是选中矩形,第二次点击才能选中矩形里面的控件。选中子报表控件,在属性面板设置ReportName属性值为“Report3”。新建一个Web页面ShowReport2.aspx。内容几乎跟Default.aspx一样。当然,有一句是要改的:report.ReportPath = Report2.rdlc;运行结果如下:下面修改数据集ProductDS。把Product表复制一份,改名为Product2。在“Product2TableAdapter”上按右键,选择“配置”。把查询语句改成下面的:SELECT Production.Product.ProductID, Production.Product.Name, Production.Product.ProductNumber, Production.Product.Color, Production.Product.StandardCost,Production.Product.ModifiedDate,Production.ProductPhoto.ThumbNailPhotoFROM Production.ProductINNER JOIN Production.ProductProductPhoto ON Production.ProductProductPhoto.ProductID=Production.Product.ProductIDINNER JOIN Production.ProductPhotoON Production.ProductPhoto.ProductPhotoID=Production.ProductProductPhoto.ProductPhotoIDWHERE Production.Product.StandardCost0 AND Production.Product.color IS NOT NULLAND LEN(Production.ProductPhoto.ThumbNailPhoto)2000这个查询语句本身并不复杂,大意是根据产品表,联合到产品ID与图片ID的对应表,再联合到图片表,最终查找到图片字段。但“架构.表名.字段”的形式,让查询语句很不直观,虽然这语句是我写的,但我看了还是会头大的。点击“完成”后,表的字段已经自动更换了:全部保存,结束对数据集的修改。报表中的数据集接下来是修改Report3。把仅有的文本框删掉。再从“网站数据源”面板,把Product2表中的“ThumbNailPhoto”字段拖到主体上来。接着把主体上的它删掉。似乎这样做了等于没做。在“解决方案资源管理器”的Report3.rdlc文件上按右键,选择“打开方式”,选择用“XML编辑器”打开,你就会看到,Report3多了一个数据集。图像控件拖一个图像控件过来。调整一下大小。不用调得太大,因为查询语句选择的是缩略图。如下图般设置图像控件的那三个属性值。为了能让Report3显示指定产品的图片,所以Report3需要一个报表参数。添加报表参数ProductID。保存,结束对Report3的修改。打开Report2。为了让表中每行的产品ID能转递给子报表控件,需要设置子报表控件的Parameters属性。保存,结束对Report2的修改。Web页的代码最后要修改的是ShowReport2.aspx.cs。下面的代码展示了应该怎样处理子报表。public partial class ShowReport2 : System.Web.UI.Page / / 数据表,供主报表和子报表使用(实际项目中不会有这种情况出现)。 / private DataTable table; protected void Page_Load(object sender, EventArgs e)/注意:这里调用的是Product2TableAdapter的方法,而不是ProductTableAdapter的方法。因为表Product2才有图像数据 table = new ProductDSTableAdapters.Product2TableAdapter().GetData(); LocalReport report = ReportViewer1.LocalReport; report.ReportPath = Report2.rdlc; report.DataSources.Add(new ReportDataSource(ProductDS_Product, table); /设置报表参数值 List list = new List(); list.Add(new ReportParameter(Price, 1000); report.SetParameters(list); /导出报表时,DisplayName 将用作默认文件名。 report.DisplayName = 第二个报表; /添加子报表处理事件 report.SubreportProcessing += new SubreportProcessingEventHandler(report_SubreportProcessing); / / 子报表处理 / / / void report_SubreportProcessing(object sender, SubreportProcessingEventArgs e) string productID = e.ParametersProductID.Values0; DataRow rows = table.Select(string.For

温馨提示

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

评论

0/150

提交评论