




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
为Web应用场景开发报表如需要开发Web(ASP.NET)下的报表,可以使用ComponentOneStudioEnterprise开发套件中的C1WebReport控件。此控件封装了C1Report组件并且提供了一系列方法和属性来容易的为Web页面添加报表。C1WebReport控件无缝的兼容C1Report,并且提供了专为Web场景设计的缓存和呈现选项。仍然可以在Web程序中使用C1Report组件,但需要写额外的代码来创建报表的HTML或PDF版本。在典型的Web场景,C1Report在服务器上以批处理或者按需创建报表。用户可以在客户端浏览器中选择报表然后查看或者打印报表。静态Web报表静态Web报表基于定期运行的创建预先定义的系列报表的服务器端程序。这些文件被网站的Web页面引用,并且可以像其他Web页面一样被客户端下载。要实现此类型的程序,参照下列步骤:1.使用C1ReportDesigner程序来创建所有需要的报表。(参见使用C1ReportDesigner阅读完成此步骤的详细信息。)2.在服务器上创建一个程序,包含一个C1Report组件。如果不想用form或window,使用CreateObject函数创建控件。3.添加一个定期运行的程序,更新所有用户可见的报表。循环内容如下所示:VisualBasic'thisrunsevery6hours:'getalistofallreportsinthedefinitionfilesFile="c:\inetpub\wwwroot\Reports\MyReports.xml"sList=c1r.GetReportInfo(sFile)'refreshthereportsontheserverFori=0TosList.Length–1c1r.Load(sFile,sList(i))sFile="Reports\Auto\"&sList(i)&".htm"c1r.RenderToFile(sFile,FileFormatEnum.HTMLPaged)NextC#//thisrunsevery6hours://getalistofallreportsinthedefinitionfilesFile="c:\inetpub\wwwroot\Reports\MyReports.xml";sList=c1r.GetReportInfo(sFile);//refreshthereportsontheserverfor(i=0;GAIS<=sList.Length–1c1r.Load(sFile,sList(i));sFile="Reports\Auto\"+sList(i)+".htm";c1r.RenderToFile(sFile,FileFormatEnum.HTMLPaged);}代码用GetReportInfo方法获取在MyReport.xml报表定义文件(在第一步中创建)中包含的所有报表的列表,然后呈现每一个报表到分页的HTML文件中。(分页的HTML文件为原始报表中的每一页生成一个HTML页面,包含能够方便浏览的导航条。)4.编辑HTML主页面,添加刚才保存的报表的链接。不仅仅局限于HTML,C1Reort也可以导出为PDF文件,可以在任何浏览上用免费的插件查看。PDF格式在多方面优于HTML,特别是生成Web报表的硬拷贝的情况下。动态Web报表动态Web报表是按需创建的,还可能依赖于用户提供的数据。此种方案常常会通过ASP.NET页面中的表单来向用户收集创建报表所需要的信息,然后创建一个C1Report组件来呈现报表到临时文件中,然后返回文件的引用地址。下面的例子是一个简单的ASP.NET页面,允许用户填写一些信息并且选择需要的报表类型。基于此,ASP代码创建了一个定制版本的NorthWind“EmployeeSalesbyCountry”报表,然后以用户选择的格式展现给用户。此示例在服务器端使用临时文件来保存报表。在实际生产环境中,必须生成唯一的文件名并且在一段时间后将其删除,以避免报表在用户查看之前被覆盖。尽管如此,此示例演示了在Web上使用C1Report发布报表的主要技术。按如下步骤来实现此类型的程序:1.从创建一个带有一个Web页面的Web程序开始,如下图所示:页面包含五个服务器端控件:_1stYear:包含有效年份的列表,具体数据为(1994,1995,和1996)。注意可以通过点击智能标签然后从菜单中选择EditItems来添加项目。在ListItemCollectionEditor对话框中添加三个新项目。_txtGoal:包含每一位员工的年度销售目标。_btnHTML,_btnPDF:用于将报表呈现到HTML或PDF然后显示结果的按钮。_lblStatus:在程序出错的情况下显示错误信息。注:如果使用demo或beta版的C1Report来运行程序,将引发控件尝试在服务器端显示其About对话框的错误。如果发生了这样的情况,只需重新加载页面就能消除这个问题。2.配置完页面之后,需要在项目中添加对C1Report组件的引用。在SolutionExplorer窗口右键点击项目,选择AddReference然后选取C1Report组件。3.添加Nwind.xml到项目的Data目录。右键点击SolutionExplorer窗口中的项目,选择NewFolder然后重命名目录为Data。然后右键点击这个目录,选择AddExistingItem然后选取Nwind.xml报表定义文件。Nwind.xml文件默认安装在Documents或MyDocument文件夹下的ComponentOneSamples\StudioforWinForms\C1Report\C1Report\VB\NorthWind\Data文件夹中。4.在项目中添加一个Temp目录。在SolutionExplorer窗口中右键点击项目,选择NewFolder然后重命名目录为Temp。5.如果使用传统的ASP,有一些有趣的事情。在控件上双击会打开代码窗口,可以写完整的代码去处理事件,与WindowsForms项目具有相同的编辑器和环境。添加如下代码:VisualBasicImportsC1.C1Report…'handleuserclicksPrivateSub_btnHTML_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)Handles_btnHTML.ClickRenderReport(FileFormatEnum.HTMLDrillDown)EndSubPrivateSub_btnPDF_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)Handles_btnPDF.ClickRenderReport(FileFormatEnum.PDF)EndSubC#usingC1.C1Report;…//handleuserclicksprivatevoid_btnHTML_Click(objectsender,System.EventArgse){RenderReport(FileFormatEnum.HTMLDrillDown);}privatevoid_btnPDF_Click(objectsender,System.EventArgse){RenderReport(FileFormatEnum.PDF);}当用户点击任何一个按钮时,这些代码在服务器端运行。6.下列代码表达了程序的主要工作,RenderReport:VisualBasicPrivateSubRenderReport(ByValfmtAsFileFormatEnum)'buildfilenamesDimrptAsString="EmployeeSalesbyCountry"DimfileInAsString=GetDataPath()&"NWind.xml"DimextAsString=Iif(fmt=FileFormatEnum.PDF,".pdf",".htm")DimfileOutAsString=GetOutputPath()&rpt&extTry'createC1ReportcomponentDimc1rAsNewC1Report()'loadthereportc1r.Load(fileIn,rpt)'getuserparametersDimyearAsString=_lstYear.SelectedItem.TextDimgoalAsString=_txtGoal.Text'customizethereportdatasourceDimsSQLAsString="SELECTDISTINCTROW"&_"Employees.Country,Employees.LastName,"&_"Employees.FirstName,Orders.ShippedDate,Orders.OrderID,"&_"[OrderSubtotals].SubtotalASSaleAmount"&_"FROMEmployeesINNERJOIN(OrdersINNERJOIN"&_"[OrderSubtotals]ONOrders.OrderID="&_"[OrderSubtotals].OrderID)"&_"ONEmployees.EmployeeID=Orders.EmployeeID"&_"WHEREYear(Orders.ShippedDate)="&year&";"c1r.DataSource.RecordSource=sSQL'customizethereport'seventhandlersDimsScriptAsString=_"IfSalespersonTotal>"&goal&"Then"&vbCrLf&_"ExceededGoalLabel.Visible=True"&vbCrLf&_"SalespersonLine.Visible=True"&vbCrLf&_"Else"&vbCrLf&_"ExceededGoalLabel.Visible=False"&vbCrLf&_"SalespersonLine.Visible=False"&vbCrLf&_"EndIf"c1r.Sections(SectionTypeEnum.GroupHeader2).OnPrint=sScript'renderthereportintoatemporaryfilec1r.RenderToFile(fileOut,fmt)'redirectusertoreportfileResponse.Redirect("Temp/"+rpt+ext)CatchxAsException_lblStatus.Text="***"&x.MessageEndTryEndSubC#//renderthereportprivatevoidRenderReport(FileFormatEnumfmt){//buildfilenamesstringrpt="EmployeeSalesbyCountry";stringfileIn=GetDataPath()+"NWind.xml";stringext=(fmt==FileFormatEnum.PDF)?".pdf":".htm";stringfileOut=GetOutputPath()+rpt+ext;try{//createC1ReportcomponentC1Reportc1r=newC1Report();//loadthereportc1r.Load(fileIn,rpt);//getuserparametersstringyear=_lstYear.SelectedItem.Text;stringgoal=_txtGoal.Text;//customizethereportdatasourcestringsSQL="SELECTDISTINCTROW"+"Employees.Country,Employees.LastName,"+"Employees.FirstName,Orders.ShippedDate,Orders.OrderID,"+"[OrderSubtotals].SubtotalASSaleAmount"+"FROMEmployeesINNERJOIN(OrdersINNERJOIN"+"[OrderSubtotals]ONOrders.OrderID="+"[OrderSubtotals].OrderID)"+"ONEmployees.EmployeeID=Orders.EmployeeID"+"WHEREYear(Orders.ShippedDate)="+year+";";c1r.DataSource.RecordSource=sSQL;//customizethereport'seventhandlersstringsScript="IfSalespersonTotal>"+goal+"Then\n"+"ExceededGoalLabel.Visible=True\n"+"SalespersonLine.Visible=True\n"+"Else\n"+"ExceededGoalLabel.Visible=False\n"+"SalespersonLine.Visible=False\n"+"EndIf";c1r.Sections[SectionTypeEnum.GroupHeader2].OnPrint=sScript;//renderthereportintoatemporaryfilec1r.RenderToFile(fileOut,fmt);//redirectusertoreportfileResponse.Redirect("Temp/"+rpt+ext);}catch(Exceptionx){_lblStatus.Text="***"+x.Message;}}RenderReport程序比较长,但是也很简单。开头解决输入和输出文件的名字。所有文件的名字都相对于当前程序的目录。接着,程序创建了一个C1Report组件然后载入“EmployeeSalesbyCountry”报表。这是一个初始的报表,在下一步将对它进行定制。用户输入的参数可以从_lstYear和_txtGoal服务器端控件中得到。代码读取这些值然后使用它们来定制报表的RecordSource属性并且为OnPrint属性构建了一个VBScript处理程序。上一个章节中提及到这些技术。一旦报表定义准备好了,代码就调用Re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 寒假教育活动方案
- 家庭助廉五个一活动方案
- 室外玩雪活动方案
- 对口帮扶送温暖活动方案
- 宣传造势活动方案
- 家教互助活动方案
- 小区搞老年人活动方案
- 小型公司周年庆活动方案
- 定向综艺团建活动方案
- 对公账户营销活动方案
- 2025至2030中国农膜行业发展分析及发展前景与投资报告
- 2025图解《政务数据共享条例》V1.0学习解读
- 2024中国农业银行分行年度营销宣传方案
- 2025电商平台店铺转让合同模板
- 2025年高考全国一卷写作范文10篇
- 高三第一学期的班主任工作总结
- 物业监控调取管理制度
- 高端私人定制服务方案
- 2025年保密知识竞赛考试题库300题(含答案)
- 智能网联汽车技术课件:超声波雷达
- 肿瘤日间化疗规范化管理
评论
0/150
提交评论