首页 OWC控件的使用

OWC控件的使用

举报
开通vip

OWC控件的使用如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX一、引言在许多B/S结构的信息管理软件中,利用在线统计图帮助用户观察、分析各种各样的数据,要比纯粹依靠统计表格更直观,更形象。然而,与窗体类程序相比,在WEB中实现统计图功能存在着一些差别,如果利用现有的ActiveX统计图控件,将其直接嵌入网页前端脚本内,那么必须要求客户端下载安装相应的控件资源。而且容易导致系统安装维护、分布式数据访问等性能上的问题。区...

OWC控件的使用
如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX一、引言在许多B/S结构的信息管理软件中,利用在线统计图帮助用户观察、分析各种各样的数据,要比纯粹依靠统计 表格 关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载 更直观,更形象。然而,与窗体类程序相比,在WEB中实现统计图功能存在着一些差别,如果利用现有的ActiveX统计图控件,将其直接嵌入网页前端脚本内,那么必须要求客户端下载安装相应的控件资源。而且容易导致系统安装维护、分布式数据访问等性能上的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 。区别于这种“胖客户”的方法,另外一种做法是,在服务器端通过数据运算,动态生成统计图像后,再向前端发布。显然,后一种方法是一种较好的模式,它对客户端的软件配置要求很低,只要前端安装浏览器即可。目前,已经有一些ASP.NET技术文章中探讨了web图表问题,一般都是先运用GDI+绘制统计图表,再利用Response对象将图像流发送到客户端浏览器。但笔者认为,对于大多数普通编程人员来说,这种开发方式对开发者的图形编程技术功底要求很高,而且费时费力。因而,在短时间内很难开发出表现力强,具有一定的通用性的专业WEB控件。那么有没有一些近在咫尺的技术可以让我们很快解决这一问题呢?笔者认为OWC组件是一个很好的选择。OWC(OfficeWebComponsents)是一组随微软OFFICE一起发布的COM控件的集合,其中Chart(图表)组件类似于Excel中的图表制作功能,能支持几十种图表类型,其非凡之处在于它们不仅可以在诸如WEB页面、VB表单等控件容器中使用,而且也可以在内存中作为不可见对象使用。下文笔者将综合几种技术阐述如何利用OWC组件开发WEB统计图表控件。二、设计原理实现的基本思路是将OWCChart组件运行于服务器上,运用其丰富的编程接口导入数据源,设置图表格式和类型后,用ExportPicture方法导出临时GIF文件,再结合ASP.NET技术,将此GIF图像返回至客户端浏览器中规定位置,最后,删除临时GIF文件,回收资源。笔者在开发过程中发现,真正的难点并不在于怎么使用OWC的接口,而在于怎样将图形发送至客户端浏览器?怎样将以上思路转换成自定义WebControl?又如何删除过期的临时GIF文件?下面我们将一步一步的构建自定义WebChart控件。如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX三、WebChart控件的开发步骤1.建立 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 WebChart运行VisualStudio.net,选择文件->新建->项目->VisualC#项目->Web控件库,如图1,建立工程名为WebChart,建立类文件WebChart.cs,选择菜单项目->添加引用弹出对话框如图2。如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX图1新建WebChart组件工程图2引用OWC资源按“浏览”按钮找到OWC10.DLL后,选择“确定”,完成WebChart对OWC资源的引用。值得注意的是,OWC组件的各个版本有所不同,为了帮助正确安装和使用,现将其罗列于下表:组件主要文件对应的Office版本机器上的一般安装位置MSOWC.DLLOFFICE2000\ProgramFiles\MicrosoftOffice\OfficeOWC10.DLLOFFICEXP\ProgramFiles\CommonFiles\MicrosoftShared\WebComponents\10OWC11.DLLOFFICE2003\ProgramFiles\CommonFiles\MicrosoftShared\WebComponents\11如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX2.继承WebControl基类,对ChartSpace类进行封装双击WebChart.cs查看代码,进入编辑状态,建立命名空间WebChartCtl,编辑如下代码,并参看其中注释 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 :usingSystem;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Drawing.Imaging;usingSystem.Web;usingSystem.Xml;usingSystem.IO;usingOWC=Microsoft.Office.Interop.Owc11;usingSystem.Runtime.InteropServices;usingSystem.Data;usingSystem.Data.OleDb;namespaceWebChartCtl如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX{[DefaultProperty(""),ToolboxData("<{0}:WebChartrunat=server>")]publicclassWebChart:System.Web.UI.WebControls.WebControl{privateChartSpaceClassm_ChartSpace;//构造函数,调用基类构造函数来指定服务器控件应该在浏览器输出一个标记publicWebChart():base("IMG"){try{m_ChartSpace=newChartSpaceClass();m_ChartSpace.DisplayFieldButtons=false;m_ChartSpace.DisplayFieldList=false;}catch{}}//显露OWC组件的图形空间对象publicChartSpaceClassChartSpace{get{returnm_ChartSpace;}}如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX//导出临时GIF图形文件privatestringExportGifFile(){stringfilename=GetTemp();//产生唯一的文件名//导出GIF文件objecto;if(m_ChartSpace.DataSource==null)//||m_ChartSpace.ConnectionString==null||m_ChartSpace.ConnectionString=="")filename="__NULL";else{o=this.m_ChartSpace.GetPicture("gif",(int)this.Width.Value,(int)this.Height.Value);this.Page.Cache[filename]=o;}如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXXthis.m_ChartSpace.Clear();//释放图表对象使用的资源if(m_ChartSpace!=null){if(m_ChartSpace.DataSource!=null)Marshal.ReleaseComObject(m_ChartSpace.DataSource);Marshal.ReleaseComObject(m_ChartSpace);}this.m_ChartSpace=null;GC.Collect();GC.WaitForPendingFinalizers();returnfilename;}//产生唯一的文件名privatestringGetTemp(){System.DateTimeT=System.DateTime.Now;return"T"+T.Date.ToShortDateString()+T.Hour.ToString()+T.Minute.ToString()+T.Second.ToString()+T.Millisecond.ToString()+".gif";T"+T.Date.ToShortDateString()+T.Hour.ToString()+T.Minute.ToString()+T.Second.ToString()+T.Millisecond.ToString()+".gif";如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX}}//endofnamespace在以上的命名空间WebChartCtl中,首先利用基类WebControl的缺省构造函数确定该控件在前端将显示为元素,接着封装ChartSpace对象属性是为了将OWCChart组件的编程接口委派给WebChart组件,从而保证可以再利用OWC所有编程特性,ExportGifFile是一私有方法,用于将ChartSpace中图表输出成临时的图形文件,为后面向浏览器传递图形做好准备。接下来,覆盖基类AddAttributesToRender方法,为前端控件设置图形源属性Src。在同一命名空间WebChartCtl中插入以下代码:protectedoverridevoidAddAttributesToRender(HtmlTextWriterwriter){base.AddAttributesToRender(writer);stringsrc,filename;try{filename=this.ExportGifFile();//产生临时图形文件//设置图形源属性Src,利用参数filename传递临时图形文件名src="handler.aspx?filename="+this.Page.Server.UrlEncode(filename);writer.AddAttribute(HtmlTextWriterAttribute.Src,src);}catch{}}如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX以上代码中handler.aspx是临时图形文件的逻辑载体,需要根据URL参数表中filename的取值,负责处理请求,产生图形流,并发送至前端。3.利用IHttpHandler接口捕获Http请求以上过程通过设置src属性向WEB服务器请求处理,那么,是否必须要设计一个handler.aspx文件,并在其中写入代码来处理客户端提交的Http请求呢?其实,并不需要这样做,否则我们的封装行为就毫无意义了。ASP.NET提供了IHttpHandler接口,可以自定义HTTP处理程序来处理特定的、预定义类型的HTTP请求,IHttpHandler位于命名空间System.web中。使用IhttpHandler必须实现ProcessRequest方法、IsReusable属性,在namespaceWebChartCtl中建立公有类RequestHandler用于捕获Http请求,插入代码如下:如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXXpublicclassRequestHandler:IHttpHandler{//处理请求publicvoidProcessRequest(HttpContextcontext){stringfilename=context.Request.QueryString["filename"];context.Response.ContentType="image/gif";if(filename=="__NULL")DrawBmp(context.Response.OutputStream);else{objecto=context.Cache[filename];byte[]s=(byte[])o;context.Response.BinaryWrite(s);context.Cache.Remove(filename);}如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX}privatevoidDrawBmp(System.IO.Streamst){Bitmapbitmap=newBitmap(1,1);Graphicsgraphics=Graphics.FromImage(bitmap);graphics.Clear(Color.White);//graphics.DrawString("版权所有(C)2001-2020",newFont("CourierNew",11,FontStyle.Underline),Brushes.Black,newPointF(5,5));bitmap.Save(st,ImageFormat.Gif);}//获取一个值,该值指示其他请求是否可以使用IHttpHandler实例publicboolIsReusable{get{returntrue;}如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX}}在ProcessRequest中,利用WriteFile将ExportPicture方法生成的临时GIF文件直接写入HTTP内容输出流。4.对Web.config文件的设置编译以上程序生成WebChart.dll,为了能让IhttpHandler起作用,还必须在测试工程的web.config文件中加入以下配置信息:其中path属性值为请求文件名,type属性值由组件命名空间WebChartCtl、IhttpHandler接口实现类名RequestHandler、组件文件名WebChart组成的字符串:"WebChartCtl.RequestHandler,WebChart"。显然,这种配置行为给组件WebChart的使用带来了一些不便,考虑到web.config是XML文档,我们完全可以用System.xml来自动完成对web.config的配置,在类WebChart中插入代码如下://在WEB.CONFIG中配置HttpHandler如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXXprivatevoidRegesterHttpHandler(){stringspath="handler.aspx";stringstype="WebChartCtl.RequestHandler,WebChart";stringfilename=this.Page.Request.PhysicalApplicationPath+@"web.config";XmlNoderoot,e,HttphandlerNode;XmlDocumentxmldoc=newXmlDocument();xmldoc.Load(filename);root=FindElement(xmldoc.DocumentElement,"system.web");if(root==null)return;e=FindElement(root,"httpHandlers");if(e==null){如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXXHttphandlerNode=xmldoc.CreateElement("httpHandlers");this.CreateAddElem(xmldoc,(XmlElement)HttphandlerNode,spath,stype);root.InsertBefore(HttphandlerNode,root.FirstChild);}elseSeekAddElemAndCreateIt(xmldoc,e,spath,stype);xmldoc.Save(filename);}//子过程,寻找指定的节点privateXmlNodeFindElement(XmlNodeelem,stringelemName){XmlNodefindit=null;foreach(XmlNodeeinelem.ChildNodes)如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX{if(e.Name.ToLower()==elemName.ToLower()){findit=e;}}returnfindit;}//查看是否包含节,如果配置信息不正确修正它privatevoidSeekAddElemAndCreateIt(XmlDocumentxmldoc,XmlNodeHttphandlerNode,stringspath,stringstype){XmlNodefindit=null;boolb=false;foreach(XmlNodeeinHttphandlerNode.ChildNodes)如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX{if(e.Name.ToLower()=="add"){b=(e.Attributes["verb"].InnerXml=="*")&&(e.Attributes["path"].InnerXml.ToLower()==spath.ToLower())&&(e.Attributes["type"].InnerXml.ToLower()==stype.ToLower());if(b){findit=e;break;}}}if(!b)CreateAddElem(xmldoc,(XmlElement)HttphandlerNode,spath,stype);}//创建节的配置信息如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXXprivatevoidCreateAddElem(XmlDocumentxmldoc,XmlElementHttphandlerNode,stringspath,stringstype){XmlElementsubnode;subnode=xmldoc.CreateElement("add");subnode.SetAttribute("verb","","*");subnode.SetAttribute("path","",spath);subnode.SetAttribute("type","",stype);HttphandlerNode.InsertBefore(subnode,HttphandlerNode.FirstChild);}//在Web页初始化时,对web.config中填入正确的设置protectedoverridevoidOnInit(EventArgse){base.OnInit(e);如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXXthis.RegesterHttpHandler();}四、WebChart控件的应用实例至此,已完成所有组件代码的编写,将工程WebChartCtl编译为WebChart.dll,即可测试应用。步骤如下1)在磁盘上建立名为TestChart的文件夹,并利用IIS将其设为虚拟目录,如图3,在VisualStudio.net开发环境中选择文件->新建->项目->VisualC#项目->ASP.NETWeb应用程序,并和WebChartCtl一样,引用OWC10.DLL(如图2),选右键菜单,将测试表单WebForm1设为“起始页”,并确保Web.Config文件可读写。图3建立测试工程图4向工具箱中添加WebChart.dll如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX2)从工具箱选项夹“WEB窗体”中拖动Lable,向WebForm1中添加控件Lable1,Text属性设为“WebChart运行实例”;3)在工具箱上,右键选择“添加/移除项”,弹出对话框如图4,选择“浏览”找到“….\WebChartCtl\bin\Debug\WebChart.dll”,将控件WebChart显示于工具箱中,拖动WebChart图标,为WebForm1中添加控件WebChart14)双击WebForm1,编辑以下代码:usingOWC10;privatevoidPage_Load(objectsender,System.EventArgse){//创建图表空间实例OWC10.ChartSpaceClassChs=this.WebChart1.ChartSpace;//设置数据库连接串以及SQL数据命令Chs.ConnectionString=@"Provider=SQLOLEDB;Datasource=(local);InitialCatalog=northwind;UserId=sa;Password=";Chs.CommandText=@"SELECTYEAR(ShippedDate)ASYEAR,MONTH(ShippedDate)asmonth,SUM(Subtotal)ASTotalFROM[SummaryofSalesbyYear]GROUPBYYEAR(ShippedDate),MONTH(ShippedDate)";//设置图表的系列,分类轴,数据轴Chs.SetData(ChartDimensionsEnum.chDimSeriesNames,0,"YEAR");Chs.SetData(ChartDimensionsEnum.chDimCategories,0,"MONTH");Chs.SetData(ChartDimensionsEnum.chDimValues,0,"Total");//设置标题Chs.HasChartSpaceLegend=true;Chs.HasChartSpaceTitle=true;Chs.ChartSpaceTitle.Caption="SummaryofSalesbyYear";ChChartCht=Chs.Charts[0];//设置图表类型,缺省为直方图,显现以下一行代码即为立体饼图//Cht.Type=ChartChartTypeEnum.chChartTypePie3D;//当图表类型为ChartChartTypeEnum.chChartTypePie3D时,//以下代码必须去除,否则代码无法执行ChAxisX,Y;Y=Cht.Axes[ChartAxisPositionEnum.chAxisPositionLeft];Y.HasTitle=true;Y.Title.Caption="Total";Y.NumberFormat="Currency";X=Cht.Axes[ChartAxisPositionEnum.chAxisPositionCategory];X.HasTitle=true;X.Title.Caption="Year";}运行工程,结果如图5,如果根据代码注释内容修改代码,运行结果如图6。以上代码运行环境为Windows2000Professional,IIS5.0,VisualStudio.NET2003,OfficeXP,SQLServer2000。如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!授课:XXX图5各年度销售业绩对比直方图图61996年各月销售业绩饼图五、总结以上内容综合了自定义WebControl技术、XML技术、IHttpHandler接口使用方法,对OWC10进行了重新封装,为实现WEB统计图表功能提供了一个非常实用的解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 。笔者在WebChart中只对OWC10中的接口ChartSpace进行了封装,目的在于不丢失OWC10编程时的灵活性,有兴趣的读者可以进一步研究OWC的帮助文档,设计出贴近个性需求的接口。(注:可编辑下载,若有不当之处,请指正,谢谢!)
本文档为【OWC控件的使用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
夕夕资料
拥有专业强大的教研实力和完善的师资团队,专注为用户提供合同简历、论文写作、PPT设计、计划书、策划案、各类模板等,同时素材和资料部分来自网络,仅供参考.
格式:doc
大小:128KB
软件:Word
页数:0
分类:其他高等教育
上传时间:2021-04-30
浏览量:28