Posted on 2007-01-26 14:04
A.Z 阅读(2348)
评论(30) 编辑 收藏 网摘 所属分类:
C#ToolsWINFORM.Net Framework
上次在blog给出了一个简单的调用fastReport组件的小示例,也许有些同学恰巧也在应用FR做报表,不知道大家经历后的感觉如何?
这里我就不抄袭某些权威的关于com的介绍了,如果你完全的不明白,这篇文章不适合你。
先谈一下我对FR的感受,FR源于1997一个俄罗斯人的不经意间的一个决定,他在delphi编程中发现没有一个报表系统可以满足他当时的需要,于是就打算亲手做一个。在98年作者的想做一个快速响应,简单的,支持脚本的报表系统有了正式的命名。作者凭借着很强的ole操作技巧很快的把FR变成了delphi中间使用率很高的报表组件。个人不喜欢pascal语言,自然的就不喜欢delphi,我对FR的景仰完全的是因为作者是一个俄罗斯的程序员,并且FR体现的理念很独到,另外小巧的组件大小也是作者自豪的地方。我这次公开的demo中包含的是FR3.0系列的COM专用组件。我在它的论坛了解到4.0会有部分不兼容3.0并且在报表定义上有些分歧,当然也多了一些功能。
在.net调用com本身是一件很容易的事情,但是有很多技巧需要把握。如果仔细观察demo你会发觉一点,这也是我想和大家分享的地方,因为本篇以FR为例但是不局限于FR,我对FR的了解大致是通透的一份programmers manual和5分钟的user manual跳读,我还没有用FR做过一份业务上的模版,所以一些问题我可能也说不上,据我的同事们说在不同的操作系统中可能会有些细小的bug,所以我推荐用户环境是xp。
中午花了点时间准备,下面就是成果了 :P
FastReportService.Instance.ShowDesigner(delegate(TfrxReport report) { report.MainWindowHandle = (int)this.Handle; },
null, GetDataSource(), null, String.Format("{0}\\Simple list.fr3", Application.StartupPath), null);
FastReportService.Instance.ShowReport(null, null, GetDataSource(), true, false, null,
String.Format("{0}\\Simple list.fr3", Application.StartupPath));
FastReportService.Instance.ShowDesigner((int)this.Handle, GetDataSource());
这是demo中的片断,你可以看到,封装后的.net调用足够的简单。这是常见的三个场景用例。
service.CustomRegSvr = true;
这个开关显示着一个com免部署的方法。要看效果直接运行FRDemo.exe。我希望可以有些惊奇。
这个demo依赖两个程序集,分别是frlib.dll和RegSvrEx.dll。给公司的版本是签名的,我给出没有签名的版本,请合理使用。
下载:
FRDemo 这里包含了demo的工程源码。
写完这篇文章后我要去办离职手续了,新公司离家远了许多,地铁人挤人,为什么人流量这么多...
Feedback
您好,拜读了你的贴子,还是有个问题想请教您,如果方便请回答一下.
关于FastReport3中的方法声明导出问题?
frlib.dll中FastReport命名空间下的类,是通过tlbimp.exe 导出来Interop.FastReport.dll?然后对通过翻编译得到的代码?
然后新建了一个项目,把这些代码加入进来的?,同时把FastReport3.dll作为资源文件加进来,是这样做的码?
我用上述的方法,存在一些错误信息,无法进行正常编译,不知能否提供一些指导信息,谢谢!
spymaster@163.com
这个类库涉及的代码并不多,也没有特别复杂的逻辑,只是展示了一部分新的代码特性和独特的处理方式,虽然我写了标题是demo,本意是如果是用2.0有类似的win app开发的话,可以参考我这个实现也可以完全拿来用。如果还在1.1中挣扎的话,我只能说可惜了。
没想到接近零点了,你也还没休息,我自己研究研究吧!
我在看电视...顺便上论坛看看,自己的blog也照顾一下。
@春风化禹
il -> c# 是一个必要的过程,但是有些场合不是一个充分的过程。
呵,我想我现在已经找到答案了。
谢谢,星期六忙了一个上午,解决了。
其实这个问题并不是项目中或其它工作中必须解决的一个问题,只是抱着一个好奇的心理来研究,还好已经解决了。
研究的过程中同时又学到了其它的知识如:
tlbimp
tlbexp
al
等使用方法等,一举多得。
thanks!
我用了组件是可以打印的,但是没有注册版本,大哥可以弄个注册版本的fastreport的for asp.net 的组件吗,谢谢了,
我mail是lyg325@tom.com
为什么FastReportService.Instance没有提供直接按照fastReport模版打印的方法呢???
打印模版?不明白在说什么?
是指直接打印吗?当然是可以的,但是我当时的意见是所有的操作都包含在这三个方法里面,因为当时的环境是客户端,并且所有的特性既然都是FR提供的,所以可以在进入报表设计器或预览窗体后由使用者确定执行的操作(还有导出等功能)。我坚决反对多余的方法如果不是必须的话。
请问我要delphi调用fastreport报表时为什么是一闪而过,没有显示报表?
请问 FastReport 是免费使用吗???
用于商业上会不会有版权的问题呢???
这个问题ls可以自己找到答案。
这里讨论的是解决方案,不是版权。
另外, 你的组件好像有点Bug...
直接用:
TfrxReportClass report = new TfrxReportClass();
...
...
...
在应用程序退出的时候会出现异常...
FastReportService使用的是单例模式, 为什么会出这样的错呢???
还有! 能实现中文界面吗???
调用LoadLanguageResourcesFromFile方法, 指定Chinese.frc的路径...
结果报错了...
请指点...
@Saiman
在我的环境里直接使用TfrxReportClass是不妥当的,你可以在方法中得到回调函数的参数,这就是TfrxReportClass实例。
在windows程序中调用FastReportService中的方法不会产生问题。
FastReportService本身是非线程安全的。
感谢您的回答...
按您所说, 勉强是可以解决...
感觉不够灵活...
@A.Z
能不能分享一下, 你是怎样把Com组件集成到.Net的DLL呢???
^o^
请问, 用您的组件怎样设置中文呢?
我真担心客户看不明白这么高深的英文!
请指教.
主从报表 怎么做? 能否提示一下.
MSN:hongya_mis@hotmail.com
看了你这个,对我的帮助很大~!
先谢谢了~!
QQ:287476575 这是我的QQ,请你加我好吗?我有几个问题想和你讨论一下~!一定要加喔
有哪位大侠知道如何实现中文界面,也就是调用中文的设计器界面,急需。。。。。。 谢谢大家 QQ:68383913 请加我,有事请教!
--引用--------------------------------------------------
zQH: 有哪位大侠知道如何实现中文界面,也就是调用中文的设计器界面,急需。。。。。。 谢谢大家 QQ:68383913 请加我,有事请教!
--------------------------------------------------------
我不用qq...
至于中文界面我重来没有用过也没有考虑,但是应该是可能提供,或可以做到的,不过最近很忙无法帮你一起考虑这个问题。回想起来快两年了,fast report组件我当时就看了大概2-3天。你如果用心的话,应该也可以。
楼主麻烦你帮忙解决一下啊,我现在急需要啊,网上关于Fastreport .net开发的很少啊 十分感谢!!!
请教一个问题。我是按照你的方法写的...
FastReportService.Instance.ShowReport(null, null, GetDataSource(), false, true, null,String.Format("{0}\\star.fr3", Application.StartupPath));
我可以在这段代码里设置是否显示打印机设置窗口和选择打印机吗?
我这么做为什么不可以?
FastReportService.Instance.ShowReport(delegate(TfrxReport report) { report.MainWindowHandle = (int)this.Handle; report.PrintOptions.ShowDialog = true; report.PrintOptions.Printer = PrinterSettings.InstalledPrinters[0].ToString(); },null, GetDataSource("star.xml"), false, true, null,String.Format("{0}\\star.fr3", Application.StartupPath));
谢谢...困扰中...
张鑫,我也遇到同样的问题,但在程序中不管怎么设置report.PrintOptions.ShowDialog的值,在打印过程中都弹出打印机选择对话框。实在是超级郁闷!!!
现在正在卡壳中,请楼主几楼上各位帮帮我!万分感谢。
我的邮箱bh0431@vip.qq.com
请教一下楼主,FastReport Studio 3.2可以用在webforms上么。。我用了以后在本机上没问题,一到IIS上就没有反应了。。谢谢。。
--引用--------------------------------------------------
dddd: 请教一下楼主,FastReport Studio 3.2可以用在webforms上么。。我用了以后在本机上没问题,一到IIS上就没有反应了。。谢谢。。
--------------------------------------------------------
可以,但是不能原封不动的照搬。