这几天在帮朋友做个小东东,需要用到报表。想到强大的Crystal Report的同时也带来部署的不确定性时,我采用了RDLC,微软总不会搬石头砸自己的脚吧。
 
有个高人,名叫蜡人张,这方面玩的很熟。有兴趣的可以去看看他的博客[url]http://waxdoll.cnblogs.com/[/url]
 
首先对RDLC介绍一下,知道的可以跳过这一段了。RDLC(Report Definition Language Client)是微软基于RDL在.NET上继续完善的结果,其XML定义格式也充分考虑到扩展性。这是报表的基本框图:
太多理论性的东西这里不再赘述,不过如果想最大可能的利用RDLC的特性,还是应该静下心来看看的。
 
在使用上,和其他报表如出一辙,最明显的就是定义数据源和报表设计器。为了灵活性,我没有直接使用设计器中添加数据源的方式,而是使用DataSet,保持数据源的结构,先满足报表需要,然后用ADO.NET填充DataSet。我做了多个报表文件(rdlc),只用一个reprotViewer显示就可以了。总之,数据源是自定义的,报表文件是动态绑定的。限于时间和篇幅,这里只说大体步骤。
 
还好,这一切都可以在VS.NET2005中一次性搞定。
第一,定义DataSet,其中最重要的是定义DataTable。在RDLC中,一个DataTable就是一个确定的数据源。注意,如果需要RDLC使用图表或者聚合函数统计的话,DataTable字段必须为数值类型,为此我损失了两个小时和两个苹果。
 
第二,定义报表。在添加新项的时候选中“报表”字样的条目。扩展名是rdlc就对了。在报表控件中“表”和“矩阵”是比较常用的数据列举方式。虽然比起Crystal Report的手工画表来说略显笨拙,但是已经足够了。
“表”中的数据区是自动循环的,只要从数据源中将要显示的字段拽进去就可以了。
 
第三,加统计图。以柱图为例,设置数据区和类型区就可以显示柱图了。但是,这对于常规的一个表两个字段的场景比较适应,其他更灵活的方式还不如Crystal Report。
 
顺便说一下,在ASP.NET和Windows Application中都可以使用。
 
总之,RDLC从报表意义上来说很实用,但是仍然需要设置的更加灵活一些,当然也许是因为我对RDL不太熟悉。