论Web控件开发 - 树状控件(一)
2005-01-08 13:00
190 查看
我曾经一直梦想拥有象windows窗体开发中一样易使用的WebMenu、WebTreeNavigatorPanel、WebDropDownTree等树结构的Web控件,当理解asp.net后我发现实现他们将不再是一个梦,目前我已经初步开发出了这些树状控件,在今后有时间的日子愿把开发心得与大家分享。
一、树状结构框架
首先针对视图状态我开发了两个基类ViewStatePartBase和ViewStatePartCollectionBase,今后所有Menu、TreeNavigator、DropDownTree的Item、ItemColleciton均从他们继承。为了便于理解这两个基类的作用,首先我们先来开发一个简单的控件WinPop来说明基类的用法。
WinPop组件主要用在网站的首页,当用户请求主页时,它会根据控件中的Items属性(弹出窗口链接地址,弹出窗口属性等等)来弹出多个窗口。其开发原型如下:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.Design;
using System.Drawing.Design;
using System.Drawing;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
namespace Keyss.WebControls
从上面的源代码可以看到ViewStatePartBase实现了IStateManager接口,除了标准的四个接口函数以外还实现了几个工具函数用来帮助对视图状态中保存的条目进行操作。其中Reset、MergeWith和CopyFrom主要针对自定义的样式类(如MenuItemStyle等等)操作。
以下是ViewStatePartBaseCollection的源代码
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.Design;
using System.Drawing.Design;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
namespace Keyss.WebControls
由代码可以看到,ViewStatePartCollectionBase从CollectionBase继承,这保证在设计器中会为此属性提供集合编辑器,而PersistenceMode(PersistenceMode.InnerProperty)属性则保证在页面序列化时会把其中的内容作为内部子属性来实现, 如下面Items属性所示:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.Design;
using System.Drawing.Design;
using System.Drawing;
using System.ComponentModel;
using System.ComponentModel.Design;
namespace Keyss.WebControls
WinPopItem的实现比较简单,只是在基类上增加了一些自定义属性,并且增加一个GetPreRenderJScript() 函数用来用属性生成前台的jscript程序字符串。而LoadFromDataRow则用来从一个tablerow中加载属性。
以下是WinPopItemCollection的源代码
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.Design;
using System.Drawing.Design;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
namespace Keyss.WebControls
WinPopItemCollection的实现了集合的Add方法,当页面解析时将调用此方法从设计时的Tag标记装载Items ,并且定义了一个索引器,另外还重载了基类中的NewItem用来返回WinPopItem类型。
最后是WinPop组件的实现
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace Keyss.WebControls
从源程序中可以看到WinPop中含有一个默认属性Items并且重载了基类中的视图状态函数,用来支持Items的视图状态。为了加载方便还实现了LoadFromTable方法用来从datatable中载入Items数据。由于WinPop并没有实际的HTML元素,只是在页面中注册jscript角本,所以重载的Render方法只是判断是否为设计时,如果是则输出控件的ID便于设计时选择该控件,而在OnPreRender方法中则注册startup类型的jscript块,这样当页面绘制时,控件会根据Items中的内容绘制一系列的window.open(url, target, features, replace);来实现弹出窗口的目的。
一、树状结构框架
首先针对视图状态我开发了两个基类ViewStatePartBase和ViewStatePartCollectionBase,今后所有Menu、TreeNavigator、DropDownTree的Item、ItemColleciton均从他们继承。为了便于理解这两个基类的作用,首先我们先来开发一个简单的控件WinPop来说明基类的用法。
WinPop组件主要用在网站的首页,当用户请求主页时,它会根据控件中的Items属性(弹出窗口链接地址,弹出窗口属性等等)来弹出多个窗口。其开发原型如下:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.Design;
using System.Drawing.Design;
using System.Drawing;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
namespace Keyss.WebControls
从上面的源代码可以看到ViewStatePartBase实现了IStateManager接口,除了标准的四个接口函数以外还实现了几个工具函数用来帮助对视图状态中保存的条目进行操作。其中Reset、MergeWith和CopyFrom主要针对自定义的样式类(如MenuItemStyle等等)操作。
以下是ViewStatePartBaseCollection的源代码
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.Design;
using System.Drawing.Design;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
namespace Keyss.WebControls
由代码可以看到,ViewStatePartCollectionBase从CollectionBase继承,这保证在设计器中会为此属性提供集合编辑器,而PersistenceMode(PersistenceMode.InnerProperty)属性则保证在页面序列化时会把其中的内容作为内部子属性来实现, 如下面Items属性所示:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.Design;
using System.Drawing.Design;
using System.Drawing;
using System.ComponentModel;
using System.ComponentModel.Design;
namespace Keyss.WebControls
WinPopItem的实现比较简单,只是在基类上增加了一些自定义属性,并且增加一个GetPreRenderJScript() 函数用来用属性生成前台的jscript程序字符串。而LoadFromDataRow则用来从一个tablerow中加载属性。
以下是WinPopItemCollection的源代码
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.Design;
using System.Drawing.Design;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
namespace Keyss.WebControls
WinPopItemCollection的实现了集合的Add方法,当页面解析时将调用此方法从设计时的Tag标记装载Items ,并且定义了一个索引器,另外还重载了基类中的NewItem用来返回WinPopItem类型。
最后是WinPop组件的实现
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace Keyss.WebControls
从源程序中可以看到WinPop中含有一个默认属性Items并且重载了基类中的视图状态函数,用来支持Items的视图状态。为了加载方便还实现了LoadFromTable方法用来从datatable中载入Items数据。由于WinPop并没有实际的HTML元素,只是在页面中注册jscript角本,所以重载的Render方法只是判断是否为设计时,如果是则输出控件的ID便于设计时选择该控件,而在OnPreRender方法中则注册startup类型的jscript块,这样当页面绘制时,控件会根据Items中的内容绘制一系列的window.open(url, target, features, replace);来实现弹出窗口的目的。
相关文章推荐
- 论Web控件开发 - 树状控件(二)
- 论Web控件开发 - 树状控件(三)
- ASP.NET控件开发系列之图片切换web控件
- 使用 .NET 框架轻松开发完美的 Web 窗体控件
- Andorid开发中WebView网页加载控件使用
- web开发,自动给页面控件复值
- 基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面
- 开发和使用Web用户控件
- Web用户控件开发--星型评分控件
- [转]在WEB下的客户端控件(OCX)的开发应用
- Skyline软件二次开发初级——1如何在web页面中添加控件和加载三维地图数据
- Android开发---WebView控件的使用
- 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
- 基于MVC+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面
- iphone开发之基本UI控件(Button控件,开关控件,分段控件,滑块控件,WebView)
- ZedGraph图形控件在Web开发中的应用
- Asp.net 2.0 自定义控件开发[开发一个图表(WebChart)控件(柱状图示例)](示例代码下载)
- 论Web控件开发 - 完美上传下载控件“新”(二)
- 用于web开发的带查询功能的combobox控件
- 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用