• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

InsideASP.NET2.0DataBoundControl-3

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
ASP.NET 2.0 较之ASP.NET 1.0和1.1提供了新的数据绑定模型,添加了一系列新的数据展现、编辑控件譬如GridView、DetailView以及FormsView等控件。

本文旨在阐述ASP.NET 2.0新的数据绑定控件架构,并且逐一介绍每一个控件。

HierarchicalDataBoundControl

HierarchicalDataBoundControl是一个抽象类,从BaseDataBound类派生,用来绑定树状数据。所有用来显示或编辑树状数据的绑定控件都应该从该类派生,例如TreeView以及Menu控件。

HierarchicalDataBoundControl实现的主要功能是从HierarchicalDataSourceControl中获取数据,派生类将不再需要关心如何从数据源中获取数据,而只需要关心其本身的业务逻辑即如何展示绑定数据。

1. HierarchicalDataBoundControl 接口
 1public abstract class HierarchicalDataBoundControl : BaseDataBoundControl
 2}

    ValidateDataSource
当用户设者HierarchicalDataBoundControl的DataSource属性时,控件会调用ValidateDataSource方法来验证绑定数据源是否为合法的数据源,通过该方法的实现我们可以知道绑定数据源必须是IHierarchicalEnumerble或者IHirarhiclDataSource对象。 

1protected override void ValidateDataSource(object dataSource)
2}

另外如果用户通过DataSourceID属性来设置数据源,当进行数据绑定时控件会尝试向数据源检索HierarchicalDataSourceView,如果检索不到,将抛出同样的异常。

    GetDataSource
该方法将会从绑定数据源中检索相关联的IHierarchicalDataSource对象,而绑定数据源是用户通过DataSourceID属性指定的,也就是说GetDataSource方法只负责从DataSourceID属性指定的数据源中检索IHierarchicalDataSource对象。

而控件的另外一个私有方法ConnectToHierarchicalDataSource则会调用GetDataSource方法,无论控件通过何种方式进行数据绑定,该方法都会返回与数据源关联的IHierarchicalDataSource对象。

我们再来看一下IHierarchicalDataSource这样一个接口:

1public interface IHierarchicalDataSource
2}

该接口将会返回一个HierarchicalDataSourceView对象,通过该对象我们就可以检索其背后的树状数据了。

    GetData
从数据源中获取HierarchicalDataSourceView 对象,另用该对象数据绑定控件可以来操作数据。HierarchicalDataSourceView类定义了Select操作,通过Select方法可以进行数据检索。

public abstract IHierarchicalEnumerable Select();

ASP.NET 2.0通过IHierarchicalEnumerable和IHierarchyData两个接口来组织树状的数据结构,通过这两个接口我们可以检索到树状数据的每一个节点。

 1public interface IHierarchicalEnumerable : IEnumerable
 2

IHierarchicalEnumerable接口负责在兄弟节点之间进行枚举迭代,而IHierarchyData接口则负责在父子节点之间进行枚举迭代。

    PerformSelect和PerformanDataBinding

HierarchicalDataBoundControl重载了PerformSelect方法,该方法只是设定数据绑定内部标志以及触发绑定事件,而将数据绑定的操作委托给了新定义的虚方法PerformDataBinding。

从该类派生的子类只需要重载PerformDataBinding方法来进行数据展示及其本身业务逻辑的处理就可以了。具体实现应该是在PerformDataBinding方法中通过GetData方法获取HierarchicalDataSourceView对象,然后进行数据检索。

2.  页面生命周期
HierarchicalDataBoundControl在页面生命周期中定义了一些时机来进行数据绑定的处理:

    OnPagePreLoad
如果是页面进行第一次请求的话,则控件要求进行数据绑定。另外如果是一次PostBack的话,并且控件仍然没有进行数据绑定,同时Enable ViewState,控件也会要求数据绑定。

 1protected override void OnPagePreLoad(object sender, EventArgs e)
 2}

这一点跟DataBoundControlde处理是一样的。

    OnLoad
在OnLoad的时候控件会向绑定数据源检索IHierarchicalDataSource对象,并且进行备份。然后如果发现控件没有进行数据绑定的话,判断页面是否为第一次请求,如果是则要求进行绑定,如果不是当控件Enable ViewState,也会要求数据绑定。

 1protected internal override void OnLoad(EventArgs e)
 2}

 3. 小结
HierarchicalDataBoundControl定义了树状数据绑定控件的基类,其主要功能是实现了向层级的数据源检索数据,其派生类只需要针对获得的树状数据包进行自己的业务处理就可以了。

 4. 结束语
这是Inside ASP.NET DataBoundControl系列文章中的第三篇,第一篇介绍了BaseDataBoundControl,后两篇分别介绍了DataBoundControl和HierarchicalDataBoundControl,前者用于绑定表状数据,后者用于绑定树状数据。

以后如果有时间的话,我会写一下DataSourceControl以及DataSourceView,这两块其实是跟DataBoundControl密不可分的。

有什么问题大家可以互相交流,取长补短,共同进步。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【ASP.NET开发】ADO.NET调用带输出参数的存储过程 ...发布时间:2022-07-10
下一篇:
asp.net问题排查事件查看器IIS日志发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap