快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

上篇介绍了在asp.net2.0版本下面如何简单的定义数据绑定控件。虽然DataBoundControl为我们提供了便利,我们以后可以从此类开始编写数据绑定控件。但是在2.0版本未到来之前,你已经为自己订制了一些数据绑定控件,既然2.0版本已经提供了数据源控件,你是否有想法,让你原有的控件也升级到同时支持通过设置DataSource属性和数据源控件来获取数据源,这样以后我们就可以省省工作了。这次我们就来讨论这个话题,让旧版本的数据绑定控件支持数据源控件。

一.准备升级数据绑定控件

即使asp.net1.1版本的一些控件也都已经支持数据源控件了,如Repeater,BaseDataList等.但本身这些对象并不是从BaseDataBoundControl和DataBoundControl等类继承下来的,如Repeater其是从Control下继承的一个模板控件,其并不需要这么多从WebControl继承下来的属性,如果你想让它支持数据源控件,你首先会想到改变控件基类,从DataBoundControl开始,这是一个好想法,但可能有些情况下并不允许这么做。上次说到了BaseDataList和DataBoundControl,BaseDataList也支持数据源控件了,所以我认为从此类继承是完全没有问题的。另外的做法就是在不改变原有控件基类的情况下,你还是需要老老实实给原控件添加一些代码支持数据源控件。那么就开始吧.

二.具体实现

本次例子跟上篇相同,相同地方就略过了

1.定义基本成员

整个控件的实现方式跟DataBoundControl实现方式很相似,我们可以看看MSDN中,BaseDataList等基类添加了哪些元素,然后模仿着实现.如果对BaseDataBoundControl和DataBoundControl这两个类成员了解的话,你将对下面成员属性很熟悉,添加这些基本成员

(1)

/// <summary>
/// 该值指示控件是否已经初始化
/// </summary>
protected bool Initialized
{
   get { return initialized; }
}

public string DataMember
{
   get
   {
     object member = ViewState["DataMember"];
     if (member == null)
       return string.Empty;
     else
       return (string) member;
   }
   set
   {
     ViewState["DataMember"] = value;
     this.OnDataPropertyChanged();
   }
}

/// <summary>
/// 为数据绑定控件提供数据源
/// </summary>
public IEnumerable DataSource
{
   get { return dataSource; }
   set
   {
     if ((value is IEnumerable) || (value is IListSource) || (value == null))
       dataSource = value;
     else
       throw new Exception("错误的数据源类型");
     OnDataPropertyChanged();
   }
}

/// <summary>
/// 数据源控件的 ID 属性
/// </summary>
[DefaultValue(""), IDReferenceProperty(typeof(DataSourceControl))]
public virtual string DataSourceID
{
   get
   {
     object dataSourceID = ViewState["DataSourceID"];
     if (dataSourceID != null)
     {
       return (string) dataSourceID;
     }
     return string.Empty;
   }
   set
   {
     this.ViewState["DataSourceID"] = value;
     this.OnDataPropertyChanged();
   }
}

/// <summary>
/// 获取是否设置 DataSourceID 属性的值
/// </summary>
protected bool IsBoundUsingDataSourceID
{
   get { return (DataSourceID.Length > 0); }
}

/// <summary>
/// 是否需要绑定到其指定的数据源
/// </summary>
protected bool RequiresDataB

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号