RDLC报表

近项目需要实现一些报表功能,使用的报表工具就是VS2005中自带的“报表”。由于以前也没有使用过,所以目前也是在学习阶段,并将所学的心得写成一个系列博客,这样可以方便以后自己复习的同时也希望能对后来的学习者有一些帮助。

什么是 rdlc?

.rdlc是VS2005中报表文件的后缀名,是Report Definition Language Client的缩写,直接翻译过来可以理解为报表定义语言客户端。这样听起来很难懂,不知所云。其实和rdlc同时存在的还有一个rdl,就是上面这个全程前3个单词的缩写。从SQL Server 2005开始,微软提供了一个报表服务(Reporting Service),而rdl是指那些针对报表服务部署在服务器端的报表,而rdlc是指在本地的一些报表。也就是说我们要使用报表不一定要依赖于SQL Server的Reporting Service,而是可以自主生成一些数据源然后通过报表的方式展现出来。如果和rdl比较,rdlc可以看成是一个轻量级的报表。在展现报表的时候我们需要使用到的一个控件叫ReportViewer,这种控件可以展现rdl报表,也可以展现rdlc报表。从其属性可以看出,ReportView.ServerReport是针对rdl报表的,而ReportViewer.LocalReport是针对rdlc报表的。里面设置的参数和内容也不尽相同。

开发RDLC报表的几个组成部分

 基于VS2005IDE,RDLC报表的开发主要分为数据源、报表设计、报表展示三个方面。

数据源大体可以分为两种,一种是通过SQL语句从数据库中得到的DataTable,还有一种是业务对象。DataTable大家都好理解,对于业务对象实际是我们一些支持IEnumerable的类,VS2005会自动识别其中的public属性作为数据源。比如下面的代码中,MyProduct类通过public属性提供了ProductName和ProductPrice两个属性。

using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.Collections.Generic;
using  System.Collections;

/// <summary>
/// MyProduct 的摘要说明
/// </summary>

public   class  MyProduct
{
    
private string _productName = string.Empty;
    
private string _productPrice = string.Empty;

    
public string ProductName
    
{
        
get return (_productName); }
        
set { _productName = value; }
    }


    
public string ProductPrice
    
{
        
get return (_productPrice); }
        
set { _productPrice = value; }
    }


    
public IList<MyProduct> GetOneSampleProducts()
    
{
        IList
<MyProduct> mySampleProducts = new List<MyProduct>(1);

        MyProduct myProduct 
= new MyProduct();
        IEnumerable myEnum 
= (IEnumerable)myProduct;
        myProduct.ProductName 
= "奶酪";
        myProduct.ProductPrice 
= "$1.39";
        mySampleProducts.Add(myProduct);

        
return (mySampleProducts);
    }


    
public IList<MyProduct> GetTwoSampleProducts()
    
{
        IList
<MyProduct> mySampleProducts = new List<MyProduct>(2);

        MyProduct myProduct 
= new MyProduct();
        myProduct.ProductName 
= "奶酪";
        myProduct.ProductPrice 
= "$1.39";
        mySampleProducts.Add(myProduct);

        myProduct 
= new MyProduct();
        myProduct.ProductName 
= "葡萄";
        myProduct.ProductPrice 
= "$5.39";
        mySampleProducts.Add(myProduct);

        
return (mySampleProducts);
    }

}

建立DataTable数据源,我们通常是建立一个“数据集”,也就是一个.xsd文件。.xsd文件大家应该都比较熟悉了,实际上我们就是生成了一个强类型的DataSet,其中包含了我们作为数据源的DataTable。

建立业务对象的数据源以后,我们需要先“重新生成解决方案”或者“重新生成网站”。然后我们可以通过“网站数据源”的窗口来看到我们生成的数据源。如果没有看到“网站数据源”窗口可以通过Alt+Shift+D或者在.rdlc设计文件的情况下点击菜单“数据”-> “显示数据源”的方式来查看。

报表设计主要针对的文件就是.rdlc文件,在其设计界面我们可以拖拽各种各样的报表控件来展示报表,其中我们用的最多的是表格和矩阵,由于这里仅仅是对报表设计做一个简单的介绍,所以这里仅仅针对表格控件进行说明。从工具栏中拖拽一个表格到设计页面,这是你可以看到“表头”、“详细信息”、“表尾”,其中表头主要是用于显示各个列的名称、详细信息为数据源中的数据(这里可能重复出现多条信息)、表尾主要用于一些合计和汇总信息,或者也可以是一些静态文字。通过从“网站数据源”窗口中将对应的数据源字段拖到“详细信息”中就基本完成了一个简单的报表设计。这个报表的样式将作为以后报表展示的基础。其实在使用以后会发现报表很多地方都和Excel比较像,包括其中的公式也是和Excel一样是以“=”开头的。这里还需要提的一件事情是,报表设计仅仅是设计了报表的框架,就是一个空壳,里面仅仅是说明了哪些数据应该显示在哪些地方,应该以什么方式进行展示(如:货币方式、百分数方式等)。和具体的数据源并没有多大关系,你完全可以在前面的.xsd中定义一个空的DataTable并定义其格式,然后在代码中动态得到数据源然后和对应的.xsd文件关联起来就可以了

报表展示主要是将报表展示在应用程序的页面上,这样用户可以对报表进行方便的查看和操作。报表的展示主要是通过在aspx页面上拖拽一个ReportViewer控件来实现的。ReportViewer主要是负责报表的展示和对报表的一些操作(如:翻页、导出、设置大小比例等),可以看成是一个容器。对ReportViewer控件上你可以选择报表,系统将列举当前应用程序中所有的.rdlc文件,选择了一个报表以后系统会自动在ReportViewer控件下方生成一个ObjectDataSource控件,以下是它对应的源码:

         < asp:ObjectDataSource  ID ="ObjectDataSource1"  runat ="server"  SelectMethod ="GetOneSampleProducts"
            TypeName
="ClassLibrary1.MyProduct" >
        
</ asp:ObjectDataSource >

其中SelectMethod是指取得用于报表展示数据源的方法,在使用DataTable作为数据源的时候,强类型DataSet会为其建立一个名称为GetData()的方法来进行调用,这里我使用的是业务对象(源码就是上面提供的源码),其中用GetOneSampleProducts方法,当然你也可以使用GetTwoSampleProducts方法,这样报表中就会有两条记录了。TypeName是指提供这个方法的类,其中业务对象不一定是在网站项目中,所以如果业务对象在其他类库项目中那么需要增加对应的DLL应用和命名空间名称(如:这里的ClassLibrary1),我想这些都是用于反射生成对象的必要因素。从这里我们也看到了,实际上.rdlc文件(报表设计)和具体的数据并没有关系,而仅仅是用于报表的样式设计。而真正得到数据源是通过ObjectDataSource控件来关联的。

恩,今天就这么多了,待续...

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值