首先说明一下“动态报表”究竟指的哪一类报表,顾名思义“动态报表”就是指没有固定报表模板,需要根据实际业务需要动态生成模板的报表。我们以职业技能培训管理系统为例,假设职业技能培训的课程包括以下课程:常规技能、商务礼仪、时间管理、财务税务、采购流程、金融投资、国际贸易、企业管理等课程。此时,公司需要对不同岗位的员工,以及他们以往是否进行过相应课程的培训,从而制定出不同的培训计划,最终的计划如下:
制定好员工的培训计划之后,职业技能培训管理系统需要对每位员工生成相应的培训计划报告,现在头疼的事情来了,每位员工参加的课程完全不一样,而且每一门课程对应的报表内容也不一样,那么如何利用ActiveReports 6.0来生成每位员工的培训计划报告呢。
这里我们就可以使用动态报表的方法来实现该需求,具体可以有两种实现方法,一种是利用子报表动态加载报表模板,一种就是动态组合各个报表内容:
方法一:使用子报表:首先有一个主报表,用于组织各种报表模板,然后在主报表的detail_Format事件中动态添加子报表的模板- private void detail_Format(object sender, EventArgs e)
- {
- switch ("课程名称")
- {
- case "常规技能":
- subReport1.Report = new Report常规技能();
- break;
- case "商务礼仪":
- subReport1.Report = new Report商务礼仪();
- break;
- case "时间管理":
- subReport1.Report = new Report时间管理();
- break;
- case "财务税务":
- subReport1.Report = new Report财务税务();
- break;
- case "采购流程":
- subReport1.Report = new Report采购流程();
- break;
- case "金融投资":
- subReport1.Report = new Report金融投资();
- break;
- case "国际贸易":
- subReport1.Report = new Report国际贸易();
- break;
- case "企业管理":
- subReport1.Report = new Report企业管理();
- break;
- default:
- break;
- }
- }
复制代码 方法二:动态组合报表模板:该方法也是需要动态添加报表模板,不过添加模板的时机与方法一不一样,首先生成一个空的报表,然后动态生成各个报表的内容,并把动态生成的内容合并到空报表中:- private void Form1_Load(object sender, EventArgs e)
- {
- DataDynamics.ActiveReports.ActiveReport rptSub;
- DataDynamics.ActiveReports.ActiveReport rptMain = new DataDynamics.ActiveReports.ActiveReport();
- foreach (var "课程名称" in "所有课程")
- {
- switch ("课程名称")
- {
- case "常规技能":
- rptSub = new Report常规技能();
- break;
- case "商务礼仪":
- rptSub = new Report商务礼仪();
- break;
- case "时间管理":
- rptSub = new Report时间管理();
- break;
- case "财务税务":
- rptSub = new Report财务税务();
- break;
- case "采购流程":
- rptSub = new Report采购流程();
- break;
- case "金融投资":
- rptSub = new Report金融投资();
- break;
- case "国际贸易":
- rptSub = new Report国际贸易();
- break;
- case "企业管理":
- rptSub = new Report企业管理();
- break;
- default:
- break;
- }
- rptSub.Run();
- rptMain.Document.Pages.AddRange(rptSub.Document.Pages);
- }
- this.viewer1.Document = rptMain.Document;
- }
复制代码 以上两种方法看似乎只是使用switch语句的时机不同,但其本质在于是否使用SubReport,在无法使用SubReport的情况下,第二种方法就成为另一种选择。
此外,第二种方法还有一种运用场景,在实际中如果报表数据量比较大(特别是在Web系统中),我们可能将报表拆分为多个小的报表进行显示,然后,我们在导出时又希望将各个小的报表作为一个报表进行导出,此时,也可以利用第二种方法来实现。 |