分类:
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)