.Net平台下水晶报表的应用研究

来源 :软件工程师 | 被引量 : 0次 | 上传用户:dd506935273
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  报表作为信息组织和分析的有效手段和重要呈现形式,是企业管理信息系统的重要组成部分。如何方便、快捷、准确地生成各种统计报表,是一个值得研究的课题。本文通过对.Net平台下的报表应用进行研究,让读者对水晶报表的应用有个全面认识,并能够进行水晶报表的设计与开发。
  .Net;水晶报表
  1 引言
  报表是一种数据管理工具,其目的是在于帮助用户快速掌握原始数据中的基本关系,以便进行有效的决策。水晶报表(Crystal Reports)是一款主要用于设计及产生报表的软件,是一个优秀的第三方报表开发工具,是业内最专业、功能最强的报表系统。它除了强大的报表功能外,最大的优势是实现了与Visual Studio所有开发工具的集成。
  Visual Studio .Net中的水晶报表是一个实现原理比较复杂但使用方法十分简单的报表生成工具,它提供了非常丰富的模型,能够在运行时操作属性和方法,即可嵌入到C/S结构应用程序中,也可以加入到B/S结构的Web应用程序中。水晶报表可以在设计器中创建,用户可以设计标题、插入数据、公式、图表、子报表等操作。同时水晶报表查看器能够用于显示水晶报表的内容,包括图和表。此外,它还具有一些自带的功能,如翻页、跳转到某一页、打印报表、刷新、放大缩小和查找等。因此水晶报表查看器也是一种功能强大的控件。
  2 .Net平台下水晶报表的控制模式
  在.Net程序开发中,经常要对合并、汇总等进行编程,水晶报表大大简化了这些工作,用它能生成漂亮的图表和格式化文本,而且还能把报表导出为Word、Excel、PDF、HTML等格式。水晶报表程序控制上有两种模式,即拉(PULL)模式和推(PUSH)模式。选择的模式不同,程序实现上也会有很大差别。
  2.1 拉模式(PULL)
  拉模式是由水晶报表模板(引擎)直接连接数据库,从数据库里拉取数据。通常情况是我们在水晶报表里设置好数据库信息以及相关的表,当我们在程序中调用水晶报表引擎,挂载模板后,水晶报表引擎会根据模板里的数据库信息,及表信息主动连接数据库,返回数据给报表模板,模板根据设计样式进行呈现。
  2.2 推模式(PUSH)
  推模式是由应用程序从数据库获取数据,然后把数据推送给水晶报表引擎,水晶报表本身不跟数据库进行交互。使用推模式将会比拉模式要多写一些代码。
  2.3 拉模式与推模式的比较
  由于拉模式是直接连接数据库,和推模式相比,在推送给水晶报表引擎的过程中少了推送给中间结果集这么一个步骤,而中间结果集本身就占用系统资源,所以拉模式比推执行效率高。
  在推模式中,数据库是由应用程序去连接的,水晶报表本身不连接数据库。这样,系统就能使用公用的数据库连接,也就节约了数据库的连接消耗。这一点,在多用户的系统环境内,少一次数据库连接对系统和系统性能的影响是比较关键的。
  当然我们也应该注意到,推模式因为存在一个中间结果集,所以会占用系统资源,也正是因为这个中间结果集的存在,使得从数据库获取数据后,能够对数据进行再加工,从而使水晶报表更加灵活多变。所以在具体实现的时候,要综合考虑实际情况来决定采用哪种模式实现。
  3 .Net平台下水晶报表的实现
  .Net平台下水晶报表开发最重要的步骤是数据的获取。在拉模式中,数据获取这一步骤是由.Net内置的水晶报表引擎自动处理,不需要编写任何代码,因此这里主要讨论推模式的实现。实现过程主要涉及以下两个文件:数据集(.xsd文件)、水晶报表(.rpt文件)。
  3.1 实现步骤
  (1)建立解决方案,在其管理器中添加数据集,在解决方案中生成.xsd格式的文件。具体过程为:添加→添加新项→类别→数据→模板→数据集。
  (2)在服务器资源管理器中,添加数据连接,选择所要连接的数据库,将数据表拖到之前建立好的数据集上,保存整个项目。
  (3)在解决方案资源管理器中,添加“Crystal Report”模板,通过“报表专家”完成报表设计。具体过程为:报表专家→数据库专家→项目数据→ADO.NET数据集→选择所需数据集对象→插入数据表。
  3.2 关键功能代码
  (1)在项目的数据访问层编写获取数据表字段的方法GetFields,该方法返回的为数据集。
  Public static DataTable GetFields()
  {
  Database db= DatabaseFactory.CreateDatabase fftConnectionString");
  String strSql= "select 列名集合 from 表名 WHERE 条件";
  DataTable dtc=db.ExecuteDataSet(CommandType.Text,strSq1).Tables[0];
  return dtc;//通过命令方式生成数据表
  }
  (2)添加Web页面Page_Load事件处理程序。首先,实例化一个DataTable对象dtl,调用GetFields方法,将返回的数据集赋给dt1,然后将dt1绑定到相关显示及格式化控件上。其次,实例化一个DataSet对象ds2,创建新命名的DataTable,比如,MyDataTable,并为其添加新列,比如,MyCol1、MyCol2,后将ds2用Session保存。
  using CrystalDecisions.Shared;//必须引入水晶报表的类库
  using CrystalDecisions.CrystalReports.Engine;
  CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt"));//制定报表路径及文件   if (1sPostBack==false)//Form_Load()事件的部分代码
  {
  DataTable dtl=new DataTable();
  DropDownList1.DataSource= dt1;//将数据表中的数据加载到显示或格式化数据空间,本例为DropDownList1.
  DropDownList1.DataTextField="COLUMN_NAME";
  DropDownList1.DataBind();
  DataSet ds2=new DataSet();//生成数据集,本例为MyTable
  ds2.Tables.Add("MyTable");
  DataColurrm MyCol=new DataColumn();//生成数据列类,并添加新列
  MyCol.ColumnName="MyCol1" ;
  MyCol.DataType=System.Type.GetType ("System.String");
  ds2.Tables["MyTable"].Columns.Add(MyCol);
  MyCol=new DataColumn();
  MyCol.ColumnName="MyCol2";
  MyCol.DataType=System.Type.GetType("System.String");
  ds2.Tables["MyTable"].Columns.Add(MyCol);
  Session["dsTemp"]=ds2;//将数据集以变量形式保存为会话
  }
  (3)报表文件的绑定
  DataTable MyTable=new DataTable();
  MyCrysta1.SetDataSource(MyTable);//设置报表文件MyCrysta1的数据表来源
  CrystalReportViewer1.ReportSource= MyCrysta1;//设置报表控件的报表文件来源
  CrystalReportViewer1.Visible=true;//报表显示
  4 利用向导制作报表
  除了使用程序方式开发报表外,还可利用报表向导轻松地完成一个报表。首先新建一个WebSite,添加报表,向导会提示创建一个数据源并打开数据库工具,根据提示,很容易就能生成一个数据源,作为报表的数据来源。在报表设计器中,可以根据需要画出想要的报表,并从“数据源”中选择想要的数据。这样,就完成了一个报表,接下来就可以使用ReportViewer控件来显示这个报表了。新建一个WebForm,从工具箱中拖一个ReportViewer控件到页面上,它会提示你选择报表,我们就选择刚才设计的报表,运行程序就能看到想要的东西了。
  5 结束语
  在ASP.NET环境下采用水晶报表开发Web动态报表,利用水晶报表本身提供的报表设计器和.Net提供的丰富特性,通过推模型从数据库中读取满足查询条件的数据,从而灵活地产生报表输出。这种设计方法在系统开发中可以作为一种通用的查询方法,因此能够减少系统的开发和维护的工作量,极大地提高系统的开发效率。同时,可以减少系统的复杂度,增加报表系统开发的可复用度,是一种比较实用的报表系统解决方案。
  参考文献
  [1]张荣圣,侯鹏志,郭圣路.Crystal Reports 2008.水晶报表从入门到精通.北京:电子工业出版社,2010.
  [2]刘彦博,等.Visual Studio技术大全.成都:人民邮电出版社,2009.
其他文献
国际关系日益复杂,而本就扑朔迷离的美俄关系中又夹杂了核政策博弈。《中导条约》的失效削弱了美俄战略稳定的基础,面对美国在提升核威慑方面的咄咄逼人,俄羅斯不甘示弱,大力升级本国的核能力。  本期《军事文摘》特邀国防科技大学国际问题研究中心专家,组建专题“见招拆招:俄罗斯的‘核重建’”,着重解读俄罗斯核威慑政策、核力量主力装备、美俄战略军控等热点话题,以飨读者。
据英国《飞行国际》网站2016年8月31日报道,为期30天的关于向阿根廷空军销售24架T-6C“德克萨斯人”II教练机的国会告知期已经结束。截至6月底,比奇飞机公司已向美国空军交付400余架T-6“德克萨斯人”II,并向美国海军交付了接近300架,用于替换两军种老旧的塞斯纳公司T-37和比奇飞机公司T-34机队。
2020年诺贝尔和平奖颁给了联合国世界粮食计划署。挪威诺贝尔委员会认为,在新冠肺炎疫情大流行的背景下,联合国世界粮食计划署表现出令人印象深刻的能力,正如该组织指出的那样,“在拥有医学上的疫苗前,食物是对抗混乱的最佳‘疫苗’”。挪威诺贝尔委员会希望通过2020年的奖项强调,为增加粮食安全提供援助不仅可以防止饥饿,还有助于未来的稳定与和平。  眼下,疫情仍在全球肆虐,许多国家限制了粮食出口,全球粮食供
与其耗费大量的时间和精力用迷茫的目光在外面的世界里寻觅,倒不如先用心去感受一下周围同事带给你的温暖和快乐。也许就在一霎那间你就会被他深深吸引,正所谓“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”。    最近发现公司论坛上关于爱情的帖子还真不少,既有男同事慨叹公司无美女可追的帖子,也有女同事驳斥他们“吃不到葡萄说葡萄酸”的回帖。有时两大阵营还会在论坛上展开激烈的辩论,大有水火不容之势。可是,我所
在1955年中国人民解放军首次举行的授衔仪式上,年仅34岁的吴忠被授予少将军衔,从而成为迄今为止我军历史上最年轻的将军。从不满13岁参加红军闹革命开始,到25岁扬名章缝集大战,再到33岁担任我军第一个机械化师的师长,及至58岁高龄仍亲自挎着自动步枪在热带丛林中指挥部队进行边境自卫还击作战,被毛泽东盛赞为“吴忠有忠”的吴忠,一生都充满了传奇色彩。参加红军闹革命  从1735年开始,清政府为了开发经历
“改革不是向国家伸手要资源,更重要的是如何盘活存量,激发每个学院的办学活力。”  ——复旦大学党委书记朱之文  “复旦将通过完善学术委员会、学位分委员会、教学指导委员会、教职工代表大会等基本治理组织,为院系自主发展提供保障。”  ——复旦大学财务处处长苟燕楠  由学校来主导下属各院系的发展,在复旦大学即将成为历史。日前,据从复旦大学透露,从2015年1月起,复旦各院系将不再“吃大锅饭”,而是要拿出
3G移动通信目前正在全世界展现着它的魅力。中国的3G是一块巨大的处女地,蕴含着丰富的商机。3G时代的到来,不仅对国内三家电信巨头的市场格局产生影响,同时为中国的电信产业赶超世界发达国家提供了有利的机会。  有一点大家已经达成共识,这是一场复杂的、多方参与的竞争博弈过程;每家运营商的参与时机、参与方式与参与领域的变化,都将使整个竞争格局发生改变。  三家电信运营商在3G时代各有优势,但想在新的格局中
如期打赢脱贫攻坚战,中华民族千百年来存在的绝对贫困问题将历史性地得到解决。中国开展的脱贫攻坚战,从理论突破、贫困治理、制度创新、世界贡献等各个方面看,都取得了显著成就,在中华民族发展史、世界社会主义发展史、人类社会发展史上都具有广泛而深远的影响。  贫困是世界各国普遍面临的问题,反贫困是古今中外治国理政的一件大事。中国共产党领导中国人民坚持和完善中国特色社会主义制度,从根本上为消除贫困、改善民生、
不久前举办的第八届世界中国学论坛上,来自全球的数百位学者围绕“中国与世界:70年的历程”这一主题展开深入研讨。观点碰撞中,一个共识格外清晰:中国在促进世界和平与发展中日益发挥积极而重要的作用。  “中国始终是世界和平的建设者、全球发展的贡献者、国际秩序的维护者,愿扩大同各国的利益交汇点,推动构建以合作共赢为核心的新型国际关系,推动形成人类命运共同体和利益共同體。”习近平总书记掷地有声的话语,鲜明地
日本最近动作频繁。2017年8月底公布的2018财年防卫预算经费申请,金额再创历史新高;9月初,英国首相特蕾莎·梅结束了对日本的访问,并在访问期间登上出云号直升机护卫舰进行参观,这一缩影或许将开启日英两国后续在军事方面的深入合作;而近来日本又强化对东南亚各国的拉拢渗透,频频向东南亚国家进行武器输出。本期《军事文摘》策劃专题“‘磨刀霍霍’暗藏‘虎狼野心’”,分析日本四面出击的背后,所隐藏的意图和考量