上次在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(nullnull, GetDataSource(), truefalsenull,
                               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

#1楼   回复  引用  查看    

2007-03-02 23:24 by 春风化禹      
您好,拜读了你的贴子,还是有个问题想请教您,如果方便请回答一下.
关于FastReport3中的方法声明导出问题?

frlib.dll中FastReport命名空间下的类,是通过tlbimp.exe 导出来Interop.FastReport.dll?然后对通过翻编译得到的代码?
然后新建了一个项目,把这些代码加入进来的?,同时把FastReport3.dll作为资源文件加进来,是这样做的码?
我用上述的方法,存在一些错误信息,无法进行正常编译,不知能否提供一些指导信息,谢谢!
spymaster@163.com

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

2007-03-02 23:54 by A.Z      
发掘是门艺术,给人愉悦。

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

2007-03-03 00:08 by A.Z      
这个类库涉及的代码并不多,也没有特别复杂的逻辑,只是展示了一部分新的代码特性和独特的处理方式,虽然我写了标题是demo,本意是如果是用2.0有类似的win app开发的话,可以参考我这个实现也可以完全拿来用。如果还在1.1中挣扎的话,我只能说可惜了。

#4楼   回复  引用  查看    

2007-03-03 08:21 by 春风化禹      
没想到接近零点了,你也还没休息,我自己研究研究吧!

#5楼   回复  引用    

2007-03-03 15:06 by A.Z[未注册用户]
我在看电视...顺便上论坛看看,自己的blog也照顾一下。

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

2007-03-03 15:17 by A.Z      
@春风化禹


il -> c# 是一个必要的过程,但是有些场合不是一个充分的过程。

#7楼   回复  引用  查看    

2007-03-05 08:30 by 春风化禹      
呵,我想我现在已经找到答案了。
谢谢,星期六忙了一个上午,解决了。
其实这个问题并不是项目中或其它工作中必须解决的一个问题,只是抱着一个好奇的心理来研究,还好已经解决了。
研究的过程中同时又学到了其它的知识如:
tlbimp
tlbexp
al
等使用方法等,一举多得。
thanks!

#8楼   回复  引用    

2007-04-05 22:04 by jackli[未注册用户]
我用了组件是可以打印的,但是没有注册版本,大哥可以弄个注册版本的fastreport的for asp.net 的组件吗,谢谢了,
我mail是lyg325@tom.com

#9楼   回复  引用    

2007-04-24 20:17 by Job[未注册用户]
为什么FastReportService.Instance没有提供直接按照fastReport模版打印的方法呢???

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

2007-05-29 16:13 by A.Z      
打印模版?不明白在说什么?
是指直接打印吗?当然是可以的,但是我当时的意见是所有的操作都包含在这三个方法里面,因为当时的环境是客户端,并且所有的特性既然都是FR提供的,所以可以在进入报表设计器或预览窗体后由使用者确定执行的操作(还有导出等功能)。我坚决反对多余的方法如果不是必须的话。

#11楼   回复  引用    

2007-07-17 17:54 by mfyao[未注册用户]
请问我要delphi调用fastreport报表时为什么是一闪而过,没有显示报表?

#12楼   回复  引用    

2007-10-05 01:37 by Saiman[未注册用户]
请问 FastReport 是免费使用吗???

用于商业上会不会有版权的问题呢???

#13楼   回复  引用    

2007-10-08 10:43 by A.Z*[未注册用户]
这个问题ls可以自己找到答案。
这里讨论的是解决方案,不是版权。

#14楼   回复  引用    

2007-10-08 23:14 by Saiman[未注册用户]
那它怎样打印数据库里的图片呢???

#15楼   回复  引用    

2007-10-08 23:18 by Saiman[未注册用户]
另外, 你的组件好像有点Bug...

直接用:

TfrxReportClass report = new TfrxReportClass();
...
...
...

在应用程序退出的时候会出现异常...

FastReportService使用的是单例模式, 为什么会出这样的错呢???

#16楼   回复  引用    

2007-10-09 13:11 by Saiman[未注册用户]
还有! 能实现中文界面吗???

调用LoadLanguageResourcesFromFile方法, 指定Chinese.frc的路径...

结果报错了...

请指点...

#17楼   回复  引用    

2007-10-10 09:56 by A.Z*[未注册用户]
把异常堆栈贴上来
不支持web应用。

#18楼   回复  引用    

2007-10-10 10:02 by A.Z*[未注册用户]
@Saiman
在我的环境里直接使用TfrxReportClass是不妥当的,你可以在方法中得到回调函数的参数,这就是TfrxReportClass实例。

在windows程序中调用FastReportService中的方法不会产生问题。
FastReportService本身是非线程安全的。

#19楼   回复  引用    

2007-10-10 10:37 by Saiman[未注册用户]
感谢您的回答...

按您所说, 勉强是可以解决...

感觉不够灵活...

@A.Z

能不能分享一下, 你是怎样把Com组件集成到.Net的DLL呢???

^o^

#20楼   回复  引用    

2007-10-21 12:46 by AB[未注册用户]
请问, 用您的组件怎样设置中文呢?

我真担心客户看不明白这么高深的英文!

请指教.

#21楼   回复  引用    

2007-11-28 16:33 by EL[未注册用户]
主从报表 怎么做? 能否提示一下.
MSN:hongya_mis@hotmail.com

#22楼   回复  引用    

2008-05-15 17:44 by 没名字[未注册用户]
谢谢了!
--
路过也要顶!

#23楼   回复  引用    

2008-09-02 11:23 by wx041[未注册用户]
看了你这个,对我的帮助很大~!
先谢谢了~!
QQ:287476575 这是我的QQ,请你加我好吗?我有几个问题想和你讨论一下~!一定要加喔

#24楼   回复  引用    

2008-10-13 16:32 by zQH[未注册用户]
有哪位大侠知道如何实现中文界面,也就是调用中文的设计器界面,急需。。。。。。 谢谢大家 QQ:68383913 请加我,有事请教!

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

2008-10-13 16:40 by A.Z      
--引用--------------------------------------------------
zQH: 有哪位大侠知道如何实现中文界面,也就是调用中文的设计器界面,急需。。。。。。 谢谢大家 QQ:68383913 请加我,有事请教!
--------------------------------------------------------


我不用qq...
至于中文界面我重来没有用过也没有考虑,但是应该是可能提供,或可以做到的,不过最近很忙无法帮你一起考虑这个问题。回想起来快两年了,fast report组件我当时就看了大概2-3天。你如果用心的话,应该也可以。

#26楼   回复  引用    

2008-10-14 13:18 by zQH[未注册用户]
楼主麻烦你帮忙解决一下啊,我现在急需要啊,网上关于Fastreport .net开发的很少啊 十分感谢!!!

#27楼   回复  引用    

2008-10-29 12:12 by 张鑫[未注册用户]
请教一个问题。我是按照你的方法写的...
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));

谢谢...困扰中...

#28楼   回复  引用    

2009-01-05 01:33 by jxq[未注册用户]
张鑫,我也遇到同样的问题,但在程序中不管怎么设置report.PrintOptions.ShowDialog的值,在打印过程中都弹出打印机选择对话框。实在是超级郁闷!!!
现在正在卡壳中,请楼主几楼上各位帮帮我!万分感谢。
我的邮箱bh0431@vip.qq.com

#29楼   回复  引用    

2009-02-22 19:08 by dddd[未注册用户]
请教一下楼主,FastReport Studio 3.2可以用在webforms上么。。我用了以后在本机上没问题,一到IIS上就没有反应了。。谢谢。。

#30楼   回复  引用    

2009-02-22 23:59 by A.Z![未注册用户]
--引用--------------------------------------------------
dddd: 请教一下楼主,FastReport Studio 3.2可以用在webforms上么。。我用了以后在本机上没问题,一到IIS上就没有反应了。。谢谢。。
--------------------------------------------------------


可以,但是不能原封不动的照搬。



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 631226




相关文章:

相关链接: