Chinaunix首页 | 论坛 | 博客
  • 博客访问: 455331
  • 博文数量: 724
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(724)

文章存档

2011年(1)

2008年(723)

我的朋友

分类:

2008-10-13 16:56:57

最近“火把节”放假,于是抽空帮弟弟所在的医院写了个检验报告单的管理系统。在打印报告单时,使用了Crystal Report for Visual Studio.NET。感觉除了每次打开项目或者报表时总要弹出的注册提示外,其他还好。就说说我是怎么用它制作检验报告单的吧。

我做了个主-子表,其中主表显示报告单上病人改名等基本信息,子表则显示该病人各种检测指标的信息。相应的,为了提取数据方便,我在SQL Server的数据库里做了两个对应的视图,再利用Visual Studio.NET的IDE创建了两个强类型的DataSet。

在“推-Push”、“拉-Pull”模型的问题上,我选择了前者。因为Push模式下,是由应用程序来管理与数据库的安全连接等,并可以选择传递给Report的数据。同时,我也能充分利用应用程序里设计的数据库连接方式进行动态调整。

于是,我将主从表的数据来源分别定义为此前创建的那两个强类型的DataSet,并利用这些字段做好了主表和子表的版面,又创建了主-子表之间的链接。期间,我还简单地学了学Crystal的语法,有点意思,挺象我一直鄙视的BASIC的。到此,Report设计这边的工作就算完了。

因为是WinForm类型的应用程序,所以我在一个对话框上放置了一个ReportViewer。当然的,出于灵活性考虑,我没有在设计时就绑定Viewer的ReportSource,而是在这个对话框Load事件中才动态的指定为主表对象。这里特别要指出的是,Viewer的ReportSource赋值语句放置的位置特别有趣。

正确的流程应当是:生成主表的DataSet并传递给主表对象--->生成子表的DataSet并传递给子表对象--->将主表对象作为ReportSource指定给Viewer。

如果不按这样的顺序,就老会有数据库登录的对话框弹出来,或者某张表的DataSet不能正确绑定。简单地咔嚓了一下,发现只要Viewer.ReportSource一被赋值,数据库的登录框就会出来,哈哈。

最后,请简单看下效果图吧

posted on 2007-08-10 02:04 Abbey的小匣子 阅读(393)   


--------------------next---------------------

阅读(274) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~