• 在VS.NET2005中使用免费报表


    我们知道,在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期)

  • 相关阅读:
    Laravel 手动分页实现
    大话Web-Audio-Api
    关于audio标签播放跨域的问题
    jquery的命名空间
    正则表达式的应用
    七天学会ASP.NET MVC (六)——线程问题、异常处理、自定义URL 【转】
    七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理 【转】
    七天学会ASP.NET MVC (四)——用户授权认证问题 【转】
    七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理 【转】
    七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 【转】
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/1987752.html
Copyright © 2020-2023  润新知