• 关于RDLC报表的一些总结,希望对正在学习使用它的朋友有所帮助


    近来,用vs2005开发一个asp.net项目,其中又有让人讨厌的报表。 在vs2003下,集成了水晶报表,相信很多朋友对它已经非常熟悉, 到了2005 ,可能是为了照顾开发人员的习惯,依然有水晶,但在部署时却会遇到不少麻烦,让人望而却步。而微软也正式推出了自己的报表工具,并将其做为 sqlserver2005一个正式的产品,这就是Reporting Services,该报表如果只在客户端使用则被称为rdlc。
    一、利用向导制作报表
    利 用向导可以很轻松地完成一个报表。首先新建一个“网站”,添加报表,向导会提示你创建一个数据源并打开数据库工具,根据提示,很容易就能生成一个数据源, 做为报表的数据来源。在报表设计器中,可以根据需要画出想要的报表,并从“数据源”中选择想要的数据。这样,就完成了一个报表,接下来就可以使用 ReportViewer控件来显示这个报表了。新建一个WebForm,从工具箱中拖一个ReportViewer控件到页面上,它会提示你选择报表, 我们就选择刚才设计的报表。OK,运行程序就能看到想要的东西了。
    二、利用程序动态加载报表
    利 用向导制作报表的确方便快捷,但作为程序员的我们,却并不甘心于此,因为实际需求千差万别,固定的报表往往并不能满足我们的需求。如何能做到像水晶报表那 样,定义好报表的架构后,只需指定要绑定的DataSet数据,就能加载报表呢?因为我们对于这种方法非常熟悉也很容易理解,而且操作起来也会更加灵活, 当然也有助于我们将数据访问类封装。经过仔细研究并结合网友的经验,找到了一种简易的办法。
    观察一下ReportViewer,在给它指定要显示的报表后,它会自己生成一个ObjectDataSource,该对象会根据生成数据源时定义的方法,获取数据库中的数据。打开该页面的源代码,会发现这样的语句:

    <LocalReport ReportPath="Report.rdlc">
                    
    <DataSources>
                        
    <rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1_DEPARTMENT" />
                    
    </DataSources>
    </LocalReport>
    其中Name="DataSet1_DEPARTMENT"指明了报表数据源的名称,这个名字很关键,它是从哪里来的呢?打开报表的xml源文件就会发现它的定义:
    <DataSets>
        
    <DataSet Name="DataSet1_DEPARTMENT">
    所以,要想利用DataSet来加载报表,只需找到这个名字,在正在的定义数据源上指定其Name就为这个值,就可以用正常的代码方式加载了。典型代码如下:
    ReportViewer1.LocalReport.ReportPath = MapPath("~/myrdlc.rdlc");
       DataSet ds = DataSetSel();//获取数据集的方法
    //设置报表数据源
    ReportDataSource rds = new ReportDataSource("DataSet1_DEPARTMENT", ds.Tables[0]);//注意这里的name和报表中的一致
    ReportViewer1.LocalReport.DataSources.Add(rds);
    ReportViewer1.LocalReport.Refresh();

    三、如何给参数赋值
    在定义报表时,我们可以给这个报表添加参数,那么如何给这些参数赋值呢?对于自动生成的报表,赋值方法可以参照帮助文档,我这里说的是针对前面描述的方法,下面是代码片断:
    ReportParameter p = new ReportParameter("title""hello");//title是报表中定义的参数
    ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { p });

    四、导出pdf出错但导出Excel正常
    ReportViewer提供了一 个导出按钮,可以方便地将报表导出为excel或pdf(但是没有象水晶那样提供一个打印插件,感觉有些遗憾),我在测试它导出为excel很正常,但导 出pdf时却总是出错,慢慢我发现只要报表中有中文就会出错,从网上也找到一个解决方法说是更改为某一字体,但我试了不灵,但显然这个问题是由于pdf对 中文的支持不够造成的。这个问题困扰了很长时间,在csdn社区里也发现不少网友碰到这个问题。昨天无意中就发现,如果采有前面讲的利用程序来加载报表, 导出pdf时就不会出错了。呵呵,问题是解决了,只是没有想明白其中的原由?

    五、另一种动态加载报表
    前 面所讲的动态加载报表的方法中,报表需要事先定义好,通过设置ReportPath来获取不同的报表,并且通过控制DataSet的内容来决定报表显示的 内容。网上也提供了一种方法,可以通过在程序中加载定制的报表定义文件来达到加态加载的目的,这个我还没有用上,大家可以用关键字“rdlc”搜一下,很 多这方面的文章。

    这些都是我在初学rdlc报表时困惑过我的问题,我想有许多初学者也可能象我一样遇到这些问题,所以写出来和大家交流一下,欢迎留言或email与我讨论。

    转自:http://blog.csdn.net/gaofeng2000/archive/2007/04/01/1548009.aspx

  • 相关阅读:
    Postman使用
    Java-性能调优-理解GC日志
    Java-性能调优实战(jps、jstack)
    Java-性能调优工具-jstat
    Java-内存模型
    生产者消费者JAVA实现
    Java-GC垃圾收集器
    JAVA-JVM垃圾回收算法
    Java线程状态流转---线程
    【洛谷5072】[Ynoi2015] 盼君勿忘(莫队)
  • 原文地址:https://www.cnblogs.com/bicabo/p/1646776.html
Copyright © 2020-2023  润新知