The Last Day Of Summer

.NET技术 C# ASP.net ActiveReport SICP 代码生成 报表应用 RDLC
posts - 306, comments - 2046, trackbacks - 78, articles - 3
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

在这里先介绍下ActiveReports。ActiveReports.net下出色的报表开发工具,我最喜欢它的地方就是提供了单独的代码文件,你能够操作数据源,也可以控制报表的显示等等,很灵活。但是可能由于宣传不足,国内用的比较少,这两天用上了最新的ActiveReports for .net 3.0,发现比起2.0,变化是比较大的,要从2.0迁移到3.0,还要费一点功夫。下面说说升级后的主要区别和要注意的几个地方,其中包含了一些朋友在本系列前面的随笔的评论中提到的问题。

 

安装:

我的安装过程可谓是一波三折。先卸载掉了2.0,安装3.0后发现VS2005每次启动后都提示“包加载错误”,要求使用“devenv /resetskippkgs”重新加载的提示。所有的窗体都无法打开设计器,而且给项目添加新项的时候也没有显示ActiveReports的文件。根据提示在网上搜了一遍,按照微软提供的资料也无法解决,无奈之下只好修复VS2005,完成后窗体设计器可以打开了,这才松了口气,重新安装ActiveReports,这次没有出现什么问题,一次OK

安装完了,第一件事就是打开帮助看看有什么新的变化,但是很不幸,帮助无法打开,只好又执行了一次帮助安装目录下的H2Reg.exe /r,才把帮助搞定。

这下整个安装过程才完成,可以正式开始了。

 

可视化设计器:

设计器中最明显的变化就是添加了“Preview”的Tab页,可以设计好布局后直接在这里预览。3.0版本还在工具栏里提供了在设计期放大,缩小浏览布局的按钮,刚安装后并不显示,需要在工具栏配置中选中。这是个很方便的功能,因为在作一些表格式的报表时,经常在设计期看到线都是对齐的,但是在打印出来后常常有中断或者偏差,有了这个功能,在设计期就能方便地检查这些错误。

还有就是在2.0中,打开报表设计器的时候会显示ReportExplore,现在ReportExplore设计成和类解决方案,属性等窗口一样的模式,可以和这些窗口重叠在一起显示。ReportExplore中的Fileds节点增加了下级:BoundCaculated

 

代码迁移:

3.0版本中,程序集名称,命名空间都已经变了,以前用2.0写的报表都编译不了,如果仍然要使用rpxcs文件的方式,就要自己修改代码,重新添加项目引用。3.0中也提供了工具,用来转换2.0下的报表。该工具是“工具”菜单下的ActiveRepots File Convert,根据向导转换完成后,你会发现,原先的报表的图表变成了和组件一样的图标,原来的Rpx文件已经不存在了,一个报表的文件组成变成了.cs + resx,同样你如果新建一个报表,也是cs+resx这样的文件组合。这应当是3.0中最大的变化了,所以如果你安装了3.0后,看到原来的rpx文件的图标是未知文件类型的,请不要奇怪。

3.0中还提供了从Access导入报表的功能,你可以在给项目添加新项的时候看到“ActiveReports 3.0 Access Import Wizard”的项,提供了一个向导来从指定的Access库中导入报表。

 

问题

ActiveReport提供了一个很重要的功能-End User,并且有一个示例程序,实现了一个报表设计器。在这个示例程序中,如果使用了中文字段名,并且显示在Report ExploreFileds节点中,从Report Explore向报表上拖放的时候会产生一个错误,提示控件名不合法。

这是因为在拖放的时候会自动生成一个和字段名相像的TextBox框,名字为“txt+字段名”,所以会报出错误。但是在2.0中却没有这个错误,当出现中文字段名时,生成对应的TextBox会自动更名,使用合法的名字。所以这应当是3.0中的一个bug

要重现这个bug,只需要在EndUser示例的窗口的Load事件中添加下面的代码:

DataTable dt = new DataTable();

dt.Columns.Add("中国");

dt.Columns.Add("123123");

dt.Columns.Add("asdf");

dt.TableName = "table1";

DataSet ds = new DataSet();

ds.Tables.Add(dt);

 

this.arDesigner.Report.DataSource = ds;

this.arDesigner.Report.DataMember = ds.Tables[0].TableName;

程序启动后会在Report Explore中看到添加的字段,直接拖放到报表上就能看到错误了。

虽然有这个问题,但是并不妨碍使用中文字段,只要不使用拖放功能就可以了。

 

粗略的看了下,捡自己觉得重要的写了。完整的更新列表还请看帮助里的“What’s New”。最新版的ActiveReports for .net 3.0可以在DataDynamic的官方网站上下载,已经是带SP1的了。

Feedback

#1楼  回复 引用 查看   

2007-01-22 13:02 by BoyLee      
国内ActiveReports 用的很少
日本用的多
我们做的日本项目都是用这个
刚用时候都是简单的东西,不觉得怎么样
后来客户要求的难度上来了,越来越觉得这个好用了

#2楼[楼主]  回复 引用 查看   

2007-01-22 13:05 by Cure      
@BoyLee
其实我就是喜欢它的写代码方便这一点:)

#3楼  回复 引用   

2007-01-22 14:13 by Pwrjng
用了快1年的AR
好处嘛,就是在设计时比较简单,都是c#代码
坏处嘛,说实话海了去了,首先不支持Table,当一个cell的内容过多需要换行时,所有的字都被省略了,要自己计算cell的长度。第二,对Excel,Word的export的格式有问题,用它的export时,里面的网格全都乱了。第三,好像至今不能调整图象的解析度,至能使200x300的。
Telerik好像也出了个什么Reporting,根ActiveReport类似,但是不知道效果如何。

#4楼  回复 引用   

2007-01-22 14:16 by Pwrjng
在说一条,那个东西几乎就没有延展性,我们试图继承他的控件,重写控件,居然都是seal class,到他的官方论坛一看,说1.0的时候,继承他的空间总是会有意想不到的错误发生,在2.0以后就禁止继承控件,可见在设计的时候纰漏暴多!

#5楼[楼主]  回复 引用 查看   

2007-01-22 14:59 by Cure      
@Pwrjng
可能是所涉及到的应用的原因,没有碰到你说的要自己算长度的问题,textBox有WordWrap属性,可以自动换行。
对于复杂不规则Table的支持,我想现在的报表程序都比较麻烦,特别是设计模板的时候,倒是Excel很方便。
还没有尝试自己对这东西进行扩展,也没有注意有没有这方面的资料,不过,想想人家毕竟不是微软,要靠这东西吃饭,如果大家都二次开发了,那不抢了它的市场了:)。

#6楼  回复 引用 查看   

2007-01-23 09:33 by BoyLee      
@Cure
嗯.是很方便.各方面处理都好多了.
惟一的缺憾就是觉得图形处理支持不是太好
*.rpx是XML存储的.图形在后台只能画简单点的,复杂点就不好画了
不过常用的,复杂图形也不是太多
Pwrjng 说的那些我倒没怎么觉得.还好了.里面的属性够用了,可以换行.表格自己用线条组合控制也方便.excel好像是有点问题.我们这日本人要求pdf,excel,txt,html四种格式,只有pdf看上去最爽

#7楼[楼主]  回复 引用 查看   

2007-01-23 10:14 by Cure      
@BoyLee
嗯,我也感觉PDF出来的感觉是最好的。线条都是抗锯齿的,预览的时候效果很好。

#8楼  回复 引用   

2007-01-29 10:40 by ud7070[未注册用户]
好用是好用,就是在客户端显示的时候总会显示不出来
我现在这是这样,以前配置的都是好好的一下就显示出来了,可是重装了一下配置基本都一样现在客户端就总是在刷新状态显示不出来了,真是奇怪,不知道可否回答这个问题

#9楼  回复 引用   

2007-01-29 11:32 by alias[未注册用户]
AR2用了一年多了, 有喜欢的地方也有不喜欢的地方
不喜欢的地方基本上都可用喜欢的地方来解决
喜欢他的"嵌入"式代码,
不喜欢的地方可能是由于太年轻了, 以后慢慢会成熟的

#10楼  回复 引用   

2007-01-29 11:35 by alias[未注册用户]
我在2003里面使用ActiveRepots File Convert 不行啊, 只有新建的报表可以迁移到3.0 , 好多旧的RPX无法转换, 提示:未将对象引用设置到对象的实例

#11楼  回复 引用   

2007-01-29 12:08 by alias[未注册用户]
ActiveReports for .net 2.0 迁移到 3.0时,

如果RPX报表文件中有使用中文命名的控件,例如Name为txt编号的TextBox

则在转换时会出现:未将对象引用设置到对象的实例 的错误提示

看来不能使用中文命名的地方有多处啊

#12楼[楼主]  回复 引用 查看   

2007-01-29 13:46 by Cure      
@alias
应该还是那个显示报表布局的控件的问题,不能接受中文的控件名称。

#13楼[楼主]  回复 引用 查看   

2007-01-29 13:47 by Cure      
@ud7070
你的是2.0还是3.0?是不是没有拷贝arview2.cab文件到虚拟目录下?

#14楼  回复 引用   

2007-03-07 09:12 by jack[未注册用户]
请教cure,我用ar3.0在vs2005下开发,做安装包客户端安装时没有问题。但在做clickonce程序发布时,没有装ar的客户端无法安装,报错:要求首先在全局程序集缓存中安装程序集ar3。在程序的属性内的系统必备中也没有出现ar。谢谢了。

#15楼  回复 引用 查看   

2007-03-07 11:48 by e表      
水晶报表杀手 -- e表, 它避免了大量的复杂SQL编写以及编程来准备数据。轻松实现复杂的统计报表,详见: http://my5155.meibu.com
用了快两个项目了,觉得他还要用钱来买,我很想不通,这么个质量还要钱,我开始以为是不要钱的,后来上了贼船,没办法了.如果可以重来,我绝对不用AR,这个破东西,除非质量上去了.真的太烂了,如果有做报表的,一定要记得,目前这情况下,千万不要用AR来做报表,会害死你的.

#17楼  回复 引用   

2007-12-19 08:05 by blueapple1[未注册用户]
速度慢好多比ver2.0

#18楼  回复 引用   

2008-01-05 19:31 by hejianbin[未注册用户]
请问为什么我的加不上?加载时环境提示模块不受信任?

#19楼[楼主]  回复 引用 查看   

2008-01-08 11:28 by Cure      
@hejianbin
是不是安装过程中出现了什么问题?

#20楼  回复 引用   

2008-08-10 00:10 by 陈 涛[未注册用户]
来这里的都是ActiveReports 的专家了吧??

在这里倾诉一个困扰我的难题:

1.
ActiveReports 如何直接打印,不预览,也不点打印提示的【确定】

好像是调用了系统的打印程序,不受C# 代码控制了。。。
2.如何在C#代码里,调整打印纸的类型,意思就是 我自己控制打印机,不用他的

rpt.Doctment.print();

因为它的print(true,false);总是提示确定!!!!!!


无奈啊!!

13606479160 QQ 372524093 mail:chengongsoft@126.com

长期求此问题答案!

#21楼  回复 引用   

2009-01-04 22:19 by guest[未注册用户]
print(false,false,false);

#22楼  回复 引用   

2009-03-10 08:44 by planetsss[未注册用户]
我做了一个网站,用的是activereports3.0,出现一个奇怪的现象,我自己组装了一个dataset,报表使用这个dataset作为数据源,但是不管怎么样都无法将值传递过去。但是在winform下就很正常,不知道为什么。。。。有人能解答一下吗?