RDLC报表(一)


        VS .NET开发中,用什么做报表?

        可能的回答是Crystal Report,自.NET“紧密”集成Crystal Report后,这可能是开发人员比较单一的选择。但是,这种集成似乎并不非常紧密,网络上充斥着关于使用Crystal Report的抱怨,太复杂也许是其最为令人诟病的地方,自定义性比较差也不能为程序员们所容忍。

        当然,必须承认Crystal Report的功能还是非常强大的,被Business Object收购以后,商业职能的成分也在逐渐增加,也形成了一定规模的用户群。

        Visual Studio .NET进入2005版本以后,Crystal Report与IDE的结合更“紧密”了,至少我们看不到那个讨厌的注册窗口了。但是,Microsoft似乎并不容忍在自己的超级工具中竟然没有报表工具,于是Report Viewer Control出现了,我把它的报表称为RDLC报表。

        在VS .NET 2005之前,SQL Server Reporting Services中已经提供了一种被称为报表定义语言(Report Definition Language, RDL)的语言;在VS .NET 2005中,Microsoft提供了针对这种报表的设计器,并提供了在WinForm和WebForm中使用这种报表的能力。Microsoft将这种报表的后缀定为RDLC,RDL仍然是Report Definition Language的缩写,那么C代表什么呢?C代表Client-side processing,凸显了它的客户端处理能力。

        这种报表的易用性和可定制性让我们完全有理由放弃Crystal Report,让我们来看看它的强大功能吧:
            1、简单易用的控件,特别是Table控件,非常方便字段在报表上的排列;
            2、灵活的可定制性,用XML来描述一个报表相关的一切,不用说了吧?
            3、高度可编程性,在你的项目中,甚至不需要有一个报表文件,通过代码就可以实现报表生成、预览和打印等一系列操作;
            4、支持DrillThrough数据钻取功能;
            5、导出的Excel文件格式非常完美,任何其它报表在这方面都不能与之比拟,而且并不需要安装Excel;
            ……[偷偷懒,其实我并不擅长总结某某的特点,我只能从实际经验中得到一点点结论,而且我也不原意去抄袭帮助中的New Features,呵呵……]

            在以后的几篇随笔中,我将结合最近一段时间使用RDLC报表的经验继续探讨相关的一些问题,大致内容包括:报表设计器的使用、LocalReport的一些相关操作,如何自定义纸张等等,欢迎大家提出参考意见。

            需要说明的是,现在关于VS. NET 2005中的Report Viewer Control的内容非常少,我只能按照自己的理解来说一些东西,这其中肯定会有一些偏差,欢迎各位的批评指正。另外,我所涉及的内容都是关于LocalReport的,对于ServerReport没有进行研究。


            相关的资源:

            MSDN的Visual Studio Controls论坛  http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=75&SiteID=1 
            GotReportViewer   http://www.gotreportviewer.com/ (有几个非常经典的例子,不知为什么最近我无法上这个网站了,呵呵,谁知道请告诉我原因,谢谢!) 

           

Life is like a boat, and I'm at sea.

posted @ 2006-02-25 19:58 蜡人张 阅读(20182) 评论(32)  编辑 收藏 所属分类: Reporting

  回复  引用  查看    
#1楼 2006-02-25 21:12 | 笑望人生      
严重支持!!

正好我在准备一个项目,其主要目的实际上不是复杂报表,而是生成表格输出到打印机。当然,是WinForm项目。

我在VS2003中根本就没有用过水晶报表,而是使用的是ActiveReport.Net,网上流传的ActiveReport的注册机就是我写的。

不过ActiveReport有个缺点,就是定义打印的表格线时,生成规格数据表的时候,如工资报表一类的打印时,表格线定义不好,不是打成双线,就是线条露头。


所以请您在写文章的时候,主要写一下表格设计。在很多项目中的报表都是两个数据源,一个是报表单独的一些信息,比如说单位、名称,电话,地址,负责人等单个信息,另外就是一个可以保存在数据库中的列表信息。我希望了解的就是怎样画出表格,并成功绑定这两种信息,这种报表好像是镶套报表。


报表是所有项目中不可缺少的部分,尤其是在中国这样的变态格式报表。所以对您的工作,我非常感谢您,期待您的精彩文章!
  回复  引用    
#2楼 2006-02-25 22:46 | Yngwie [未注册用户]
非常感谢,我也正在开发报表唱主角的一个项目,学习了!
  回复  引用  查看    
#3楼 2006-02-26 14:31 | 萝卜      
我最近用这个报表做了单据打印,效果非常好!不过要通过一些变通的方法才行!
  回复  引用    
#4楼 2006-02-26 16:45 | Yng [未注册用户]
很不错!
  回复  引用  查看    
#5楼 2006-02-27 11:21 | A.Z      
支持纯托管平台的可视化报表软件。
  回复  引用    
#6楼 2006-03-04 12:30 | joing [未注册用户]
非常感谢
  回复  引用    
#7楼 2006-03-09 19:46 | 光速 [未注册用户]
之前,我用过水晶报表,已经开始用得顺手了,不过与VS的结合还不是很紧密,从VS2003到VS2005,水晶报表的部署都是件麻烦事。其次,数据源也件麻烦事,有个报表中用了子报表,到目前我也不知道怎么给子报表指定数据源。
刚刚用了几天,不难发现RDLC轻松支持多个DS,多个数据表(毕竟是自家的东西),还有导出到EXCEL也很好,基本是原样导出,导出功能比水表好多了(自家嘛..)
不过现在我对RDLC的许多功能都还不了解...特别是统计和公式。
  回复  引用  查看    
#8楼 2006-03-11 08:29 | anchky      
楼主很有见地。
我虽然没有用过RDLC,但是已然能了解其某些方面的强大功能。
我们也一直在致力数据仓库分析前端展示的研究,我们的Grid展示一直建议、也一直坚持在用FlexGrid。FlexGrid控件相信大家都比较熟悉,用它来支持dw的多维展示,需要自己写比较的代码来支持,不过也正是由于这样,FlexGrid展示相对比较灵活。反映速度也可以。
看了楼主的这篇文章,我很想详细了解下所谓RDLC。
  回复  引用  查看    
#9楼 2006-03-11 08:33 | anchky      
很想知道,楼主用图形展示报表吗?
  回复  引用  查看    
#10楼 [楼主]2006-03-11 11:06 | 蜡人张      
@anchky
肯定是要用图形来展示报表的,对RDLC报表来说,这也不是问题,因为MS提供了功能强大的Chart控件,但MS在图形化报表方面一直没有一个Dash Board(好像BIP里面有,记不清了),但我相信,MS很快就会出一个完整的BI前端展示工具。当然,图形报表实现的方法很多,也可以考虑自己写,相关的技术大概有OWC,SVG,VML,GDI+,SGC等等。
最近在研究.
  回复  引用    
#13楼 2006-05-16 14:55 | 长江支流 [未注册用户]
有幸在网上以“打印通”搜到作者RDLC报表(三),作者过奖。
确实,《金质打印通》可以用RDLC实现。但是,它的姊妹篇《天下报表》(www.AnyReport.Net)也在可以解析VS2005报表设计器的同时,还可以解析一些Html、VS Web设计器生成的元素。
  回复  引用    
#14楼 2006-10-18 14:56 | yfklx [未注册用户]
谢谢,学到了很多
  回复  引用  查看    
#15楼 2006-10-23 09:02 | Tseng      
太好了,不知道RDLC的部署不知道麻烦码?
前短时间用了VS2005的水晶报表,报表是做好了,但是部署一直都搞不成功,特麻烦。
  回复  引用    
#16楼 2006-11-22 12:54 | 老木子 [未注册用户]
在使用动态生成报表过程中,如果有中文字符,则导出到pdf时会出错,导出到excel不出错,请问是什么原因?
  回复  引用    
#17楼 2006-12-25 10:24 | ghx88[匿名] [未注册用户]
请问生成rdlc报表可不可以不访问数据库,直接建个DataTable 来绑定?

DataTable dt = new DataTable();
dt.Columns.Add("project", typeof(string));
dt.Columns.Add("score", typeof(int));
DataRow dr1 = dt.NewRow();
dr1["project"] = "语文";
dr1["score"] = 96;
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["project"] = "数学";
dr2["score"] = 80;
dt.Rows.Add(dr2);
……
ReportViewer rv = new ReportViewer();
rv.LocalReport.ReportPath = "re.rdlc";
ReportDataSource rds = new ReportDataSource("CustomDt", dt);

试过这样不行,有没有什么好方法?如何设置Rdlc?
  回复  引用    
#18楼 2006-12-27 23:07 | jj[匿名] [未注册用户]
可以条件筛选dataset么?请问各位这样用过么?
  回复  引用  查看    
#19楼 2007-01-10 10:20 | chinachen      
关注。
  回复  引用    
#20楼 2007-02-28 17:51 | Juny [未注册用户]
报表分组后,怎么样汇总单个组内的数据呢?
期望赐教,找了半天没找到,
Email Dr.JY@163.com
  回复  引用    
#21楼 2007-03-22 10:22 | ooo [未注册用户]
不错
  回复  引用    
#22楼 2007-07-25 15:50 | lan [未注册用户]
如何在这个控件里面制表格,并且在winfrom运行预览时显示出表格?
  回复  引用    
#23楼 2007-08-13 11:27 | 紫沫 [未注册用户]
rdl导出EXCEL时子报表被忽略,什么原因呀?
  回复  引用  查看    
#24楼 2008-01-04 09:38 | 林志松      
好像挺简单的.

不过不知道怎么搞












http://www.map99.net
  回复  引用  查看    
#25楼 2008-05-28 15:41 | 编程的夜猫      
支持,收藏了,以后用得着.
  回复  引用  查看    
#26楼 2008-06-03 10:18 | 逍遥海盗船      
是哦,怎么汇总组内的数据?水晶报表比较简单,RDLC不知道怎么用。
  回复  引用  查看    
#27楼 [楼主]2008-06-05 11:27 | 蜡人张      
@逍遥海盗船
很简单,直接使用表达式生成器,选择sum就可以了。
  回复  引用  查看    
#28楼 2008-06-05 11:58 | 逍遥海盗船      
@蜡人张
呵呵,我会了,我原来是有两个表,直接拉过来在后面多了个表名所以出错了。将后面的参数删除就可以了。呵呵!
  回复  引用  查看    
#29楼 2008-06-05 11:58 | 逍遥海盗船      
@蜡人张
谢谢!
  回复  引用  查看    
#30楼 2008-07-21 11:18 | hbf      
瞧瞧
  回复  引用  查看    
#31楼 2008-07-31 14:25 | 时间太快      
正在学习中。非常感谢。。这方面的资料也很少。。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-02-25 20:00 编辑过


相关链接: