快速业务通道

ASP.NET控件开发基础(21)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
着你便可以在DataBind方法中通过获取到的数据源视图异步获取数据了,本来我们可以调用其ExecuteSelect方法的,可惜我们无法调用此方法,只好异步调用。接着的PerformDataBinding方法跟上篇实现一样。不再列出

记得在DataBind方法将RequiresDataBinding属性设置为true

/// <summary>
/// 将数据源绑定到控件
/// </summary>
public override void DataBind()
{
   if (!IsBoundUsingDataSourceID)
   {
     OnDataBinding(EventArgs.Empty);
   }

   GetData().Select(CreateDataSourceSelectArguments(),
     OnDataSourceViewSelectCallback);
   RequiresDataBinding = false;
   MarkAsDataBound();
}
private void OnDataSourceViewSelectCallback(IEnumerable retrievedData)
{
   if (IsBoundUsingDataSourceID)
   {
     OnDataBinding(EventArgs.Empty);
   }
   PerformDataBinding(retrievedData);
}

5.重写控件生命周期事件

其中在OnPreRender方法中调用了EnsureDataBound方法,其他方法的话可以发现在很多不同情况下将RequiresDataBinding和Initialized属性设置为True.做了数据绑定的初始化工作。这里估计我也解释不清楚,大家还是了解下控件的生命周期,了解其事件的使用,再理解吧.

protected override void OnInit(EventArgs e)
{
   base.OnInit(e);
   if (this.Page != null)
   {
     this.Page.PreLoad += new EventHandler(this.OnPagePreLoad);
     if (!base.IsViewStateEnabled && this.Page.IsPostBack)
     {
       this.RequiresDataBinding = true;
     }
   }
}

private void OnPagePreLoad(object sender, EventArgs e)
{
   initialized = true;
   if (Page != null)
   {
     Page.PreLoad -= new EventHandler(OnPagePreLoad);
     if (!Page.IsPostBack)
     {
       RequiresDataBinding = true;
     }
     if ((Page.IsPostBack && base.IsViewStateEnabled) && (ViewState["DataBound"] == null))
     {
       RequiresDataBinding = true;
     }
   }
}

protected override void OnPreRender(EventArgs e)
{
   EnsureDataBound();
   base.OnPreRender(e);
}

protected override void OnLoad(EventArgs e)
{
   this.initialized = true;
   this.ConnectToDataSourceView();
   if (this.Page != null && this.ViewState["DataBound"] == null)
   {
     if (!this.Page.IsPostBack)
     {
       this.RequiresDataBinding = true;
     }
     else if (base.IsViewStateEnabled)
     {
       this.RequiresDataBinding = true;
     }
   }
   base.OnLoad(e);
}

好了,基本代码的编写就完成了,接着你就可以通过设置DataSource属性手动绑定的形式和设置DataSourceID属性获取数据源的形式获取数据了。

这篇可以供参考,如果真要这么做的话,几乎每个原有的数据绑定控件都需要重复编写上面这么多代码。相比之下如DataBoundControl类和BaseDataList类都已经帮你完成了上面的工作,在有选择的情况下,我们当然不愿意写上面这么多的代码。所以说上面的这堆代码也只供你参考,能够使用新的基类的话,尽量使用,如果真的需要这么做的话,你就需要这么去改你的数据绑定控件。

这篇可能讲的不是很详细,大家如果真的有必要这么做的话,可以仔细看看。不足之处还请大家纠正^_^.

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号