程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET控件開發基礎(21)

ASP.NET控件開發基礎(21)

編輯:關於ASP.NET

上篇介紹了在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 RequiresDataBinding
{
   get { return requiresDataBinding; }
   set { requiresDataBinding = value; }
}

/// <summary>
/// 用於檢索數據的 DataSourceSelectArguments 對象。默認為 Empty 值
/// </summary>
protected DataSourceSelectArguments SelectArguments
{
   get
   {
     if (selectArguments == null)
     {
       selectArguments = CreateDataSourceSelectArguments();
     }
     return selectArguments;
   }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved