利用水晶报表动态绑定数据源实现动态交叉表的方法研究
2015-10-20常婉纶刘豫凡西安理工大学陕西西安7008西北工业大学机电学院陕西西安7007
刘 辉,常婉纶,刘豫凡(.西安理工大学,陕西 西安7008;.西北工业大学 机电学院 陕西 西安 7007)
利用水晶报表动态绑定数据源实现动态交叉表的方法研究
刘辉1,常婉纶1,刘豫凡2
(1.西安理工大学,陕西西安710082;2.西北工业大学机电学院陕西西安710072)
为减少数据冗余,根据规范化理论设计的数据库不能直接输出分类汇总的结果,需要进行转换生成交叉表,并利用水晶报表的Push模式实现对交叉表的显示。在.NET和SQL Server环境下,探讨了动态交叉表的生成和利用水晶报表动态绑定数据源显示数据的方法,并给出了较为详细的实现过程。
动态交叉表;水晶报表;Push模式;动态绑定
0 引言
信息系统中都不能缺少报表,而交叉表是种常见的报表形式,它将源表中的数据分组汇总后,一组列在表的左侧,另一组列在表的上部,从而形成一种分类汇总表格[1]。动态交叉表是按用户呈现数据的要求,不仅对数据进行分类,同时还要根据表中数据的情况动态创建列,把数据行信息置换到表格列处并进行汇总。
水晶报表是一款商务智能软件,主要用于设计产生报表,是业内功能最强的报表系统[2],其出现的目的就是使计算机参与到办公系统业务流程中。
1 问题的提出
以我校学生成绩管理系统为例,为消除存储异常,减少数据冗余,保证数据的完整性,按规范化设计理论设计的数据库含多张表,其中与成绩有关的3个表的关系模式学生信息表S(学号、姓名、性别、班号)、课程信息表C(课号、课名)、学生成绩表SC(学号、课号、学期、成绩)之间的关系图如图1所示。学生成绩表中的数据形式如图2所示。实际工作中需要打印的学生成绩表如图3所示。
图1 3个表的关系图
图2 成绩表中的数据
由此可见,数据库中存储的数据,在某些应用中,需要生成动态交叉表,因不同班级不同学期学生学习的课程不一样,生成的动态交叉表的列项的个数和名称都是不固定的。经验表明,水晶报表虽然功能强大且使用方便,但它要求设计表格时所使用的表名以及列名与使用时必须一致。本文研究了水晶报表的Pull模式和Push模式[3],提出了在数据库端生成一个表格列项固定的动态交叉表,利用Push模式动态绑定数据源把数据推送给水晶报表引擎的方法。
图3 需打印的某班级学生成绩单样式
2 生成动态交叉表
首先在数据库服务器端完成列项名称与个数固定的动态交叉表的生成。设每学期最多有8门课,实现方法如下:
(1)创建函数ufGetCourse,功能是筛选出某班对应学期的课程,并按顺序编号。运行结果如图4所示。
图4 某班某学期开设的课程及顺序编号
(2)创建存储过程upCreateJCB,功能是按学号对应,把顺序编号为1的4号课程成绩放在Cj1列中,把顺序编号为2的5号课程成绩放在Cj2列中,以此类推,最后计算每个学生的总评分。运行结果如图5所示。
图5 生成的动态交叉表
3 水晶报表动态绑定数据源
应用程序的前台界面在.NET平台下进行水晶报表设计,采用Push模式在程序中动态加载数据源和报表,用动态传参方式把表头的cj1~cj8更换成对应的中文课程名,方法如下:
(1)建立解决方案。在解决方案资源管理器中添加“Crystal报表”模板。方法为:添加→新建项→Crystal报表→命名报表为MyCry.rpt→作为空白报表。
(2)在字段资源管理器中通过“报表专家”完成报表设计。方法为:数据库字段→数据库专家→创建新链接→OLE DB(ADO)→MicrosoftOLE DB Providerfor SQL Server→填写链接数据库的信息→选择对应的数据库→选择存储过程upCreateJCB→把涉及的字段拖拽到水晶报表细节栏中并填上表格线。
(3)在字段资源管理器中添加参数字段:班级名classname、学期TermNo、Cj1~Cj8,并把这些参数字段拖拽到水晶报表的页眉栏处。
经过上述过程设计的报表MyCry.rpt如图6所示。
图6 设计完成的水晶报表MyCry.rpt
(4)在窗体上放一个CrystalReportViewer控件并命名为crv,用C#编程动态加载数据源和报表。代码如下:
4 结论
本文提出了利用水晶报表显示并打印动态交叉表的一种方法,图3就是本校学籍管理系统中用本方法打印的成绩汇总表,由于来源于真实数据,故姓名处进行了处理。
[1]张贤斌,费树岷.管理信息系统中动态交叉表的实现方式研究[J].计算机应用工程技术,2008,4(4):995-996.
[2]丛凤侠,杨玉强.通用水晶报表自动生成技术研究[J].计算机技术与发展,2013,23(5):54-57.
[3]钱哨,李挥剑,李继哲,等.C#WinForm实践开发教程[M].北京:中国水利水电出版社,2010.
Using crystal reports dynamic binding data source for complex dynamic crosstab method research
Liu Hui1,Chang Wanlun1,Liu Yufan2
(1.Xi′an University of Technology,Xi′an 710082,China;2.School of Mechanical Engineering,Northwestern Polytechnical University,Xi′an 710072,China)
To reduce data redundancy,it is impossible to output a subtotaled report based on a database design which follows the strict design paradigm.To do it,transforming data to cross-table and rendering them via push model in crystal reports is needed.Based on.NET and SQL server environment,this paper explores and studies the technique about generating dynamic crosstable and the method about dynamic binding the data source to display data,as well as gives a more detailed implementation process.
dynamic crosstab;crystal reports;Push mode;dynamic binding
TP312
A
1674-7720(2015)10-0084-03
2015-01-17)
刘辉(1965-),女,硕士,副教授,主要研究方向:软件算法、数据库、数据挖掘。