陈宝刚---享受生活,追逐梦想!
理想是心中的火焰,有追求的人才是幸福的人!

我们知道,在VS.NET2003下提供了Crystal Report报表,它功能强大,但是它是要收费的。现在,在VS.NET2005中我们有了另外一个选择,而且它是完全免费使用的,那就是RDLC报表。下面,就让我们一起来享受这份免费的大餐吧。

 

 

[一、认识RDLC报表]

RDLC的英文全称是Report Definition Language Client-side processingClient-side processing强调了它的客户端处理能力。RDLC报表基于报表定义 ,它是一个说明数据和布局的XML文件,使用报表定义语言编写。VS.NET2005提供了设计和使用这种报表的能力,Microsoft将这种报表的后缀定为RDLC

相对于Crystal Report,它的功能并不逊色:

l         WinFormWebForm中都可以使用;

l         丰富的控件可以满足各种报表样式的需要;

l         强大的数据处理能力,在报表中就可以对数据进行分组、排序、筛选;

l         使用方便。不需要安装额外的软件,通过控件就可以轻松的实现导出ExcelPDF

l         XML描述报表,使通用成为可能;

 

 

[二、活用RDLC报表]

下面,我们通过一个实例来介绍如何在WinForm中使用RDLC报表中控件来实现多层报表样式。希望能帮大家达到活用的目的。

1。定义数据源

首先创建一个Visual C#“Windows应用程序项目(ReportTest),然后选择菜单数据”—“添加新数据源。在打开的数据源配置向导中选择数据库,单击下一步。在选择你的数据连接页中,笔者选择的是SQL server 2000下的Northwind数据库,单击下一步。然后在选择数据库对象页中,选择表“Orders”,最后单击完成按钮,添加的数据源如图1所示。

 


2
。添加报表

选择菜单 添加新项,打开添加新项对话框。选择报表图标,输入名称,单击添加按钮,将打开报表设计器。在工具箱中双击控件,将数据源窗口中的OrderID字段拖至表的详细信息行的第一列,可以看到详细信息单元格显示的是字段表达式“=Fields!OrderID.Value”,并且表头行自动放置了标题,默认是字段名。依次在其他单元格放上相应字段,结果如图2所示。

 


3
。设置字段格式

右键单击包含 OrderDate 字段表达式的单元,在弹出菜单中选择属性 格式选项卡单击格式代码后的第2个按钮,打开选择格式对话框。为OrderDate 字段选择合适的格式(如图3),单击确定即可。

 


4
。添加分组

组可以用来显示递归层次结构,比如显示每个客户(Customer)对应的订单(Order)。

单击选中表,在详细信息行最左边单击右键,在弹出菜单中选择插入组 常规选项卡上的分组方式框中,在第一行选择“=Fields!CustomerID.Value”,如图4所示,这将按照CustomerID对数据进行分组。最后单击确定 表中将添加组头和组尾两个新行。

 



5
。设置详细信息排序方式

单击选中表,在表的左上角单击右键,在弹出菜单中选择属性,打开表属性对话框。排序选项卡上的排序方式框中,在第一行选择 “=Fields!OrderDate.Value”,在第二行选择 “=Fields!OrderID.Value”,排序方式设为先按日期降序排列,然后再按订单号升序排列,如图5所示。

在上面分组属性对话框中同样可以设置组的排序方式。


6
。添加公式

为了计算每个Customer的订单数。右键单击组尾的第一个单元格,在弹出菜单中选择表达式,在编辑表达式对话框的上部书写表达式=Count(Fields!OrderID.Value)。如果不太清楚公式的含义,可以在下方的类别树中选择,说明窗口会有相应的提示,如图6所示

 


7
。显示报表

VS.NET2005提供了一个专门的ReportViewer控件用来显示RDLC报表。在Form1上添加一个button控件和一个ReportViewer控件。在button控件的Click事件中编写如下代码:

private void button1_Click(object sender, EventArgs e)

{

//设置数据源

reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NorthwindDataSet_Orders", LoadData()));

//设置报表

reportViewer1.LocalReport.ReportEmbeddedResource = "ReportTest.Report1.rdlc";

this.reportViewer1.RefreshReport();

}

这里没有使用最开始绑定的数据源,而是用LoadData函数设置数据,这样的好处是如果修改了数据源,比如从Access转到SQL server,报表不需要做任何修改,但必须保证数据源架构相同。代码如下:

private DataTable LoadData()

{

SqlConnection con = new SqlConnection("Data Source=servername;Initial Catalog=Northwind;Integrated Security=True");

SqlCommand cmd = new SqlCommand("select * from orders where orderdate>='1998/01/01' order by customerid", con);

SqlDataAdapter adp = new SqlDataAdapter(cmd);

DataSet ds = new DataSet();

adp.Fill(ds);

return ds.Tables[0];

}

因为报表的生成操作属性默认是嵌入的资源,所以需要设置ReportEmbeddedResource属性,如果是使用外部文件,代码如下:

reportViewer1.LocalReport.ReportPath = "Report1.rdlc";

 

最后的效果如图7所示,怎么样,效果不错吧?

 


(刊登于 电脑报2006/09/11 第36期)

posted on 2011-03-18 10:12  追梦人RUBY  阅读(254)  评论(0编辑  收藏  举报