Inside ASP.NET 2.0 DataBound Control – 2

來源:互聯網
上載者:User
l原創文章,如需轉載,請註明出處。

DataBoundControl

DataBoundControl是一個抽象類別,從BaseDataBound類派生,用來綁定List或者Table狀資料。所有用來顯示或編輯List或Table狀資料的繫結控制項都應該從該類派生,例如ListBox,DropDownList,CheckboxList還有GridView。

DataBoundControl實現的主要功能是從資料來源中擷取資料,無論使用者是通過設定DataSource還是通過DataSourceID進行的資料繫結。擷取到的資料將以IEnumerable的方式提供給衍生類別,這樣衍生類別將不再需要關心如何從資料來源中擷取資料,而只需要關心其本身的商務邏輯即如何展示綁定資料。

1.  DataBoundControl介面: 1public abstract class DataBoundControl : BaseDataBoundControl
 2{
 3    public virtual string DataMember { get; set; }
 4    protected DataSourceSelectArguments SelectArguments { get; }
 5
 6    protected override void PerformSelect();
 7    protected virtual void PerformDataBinding( IEnumerable data);
 8
 9    protected virtual DataSourceView GetData();
10    protected virtual IDataSource GetDataSource();
11}

   
DataMember

    DataMember屬性用來指定綁定資料列表名稱,使用者佈建的資料來源可能會包含多個不同的資料項目列表。比如綁定到控制項的資料來源控制項含有多個DataSourceView,或者綁定到控制項的資料來源是一個DataSet,而這個DataSet含有多個資料表格。

       
    SelectArguments

      而SelectArguments屬性則定義了用於向資料來源控制項檢索資料時使用的 DataSourceSelectArgument 對象,注意使資料來源控制項,也就是通過DataSourceID進行的資料繫結。

      通過該對象可以指定檢索資料的起始行位置、最大行數,設定排序運算式,同時還可以檢索資料來源的總行數。

      下面是DataSourceSelectArgument 對象的介面: 1public sealed class DataSourceSelectArguments
       2{    
       3    public int StartRowIndex { get; set; }
       4    public int MaximumRows { get; set; }
       5
       6    public string SortExpression { get; set; }
       7
       8    public bool RetrieveTotalRowCount { get; set; }
       9    public int TotalRowCount { get; set; }
      10}

      DataBoundControl的衍生類別可以通過配置SelectArguments來最佳化資料查詢,比如當控制項支援分頁功能的時候,可以只檢索當前頁面所需資料。

         
      PorformSelect, PerformDataBinding

        DataBoundControl重載了PerformSelect方法,在這個方法中控制項將會向資料來源檢索資料,並且將檢索到的資料作為參數來調用PerformDataBinding方法。

        PerformDataBinding是DataBoundControl類定義的虛方法,衍生類別只需要Override該方法,處理檢索到的資料就可以了。

           
        GetDataSource
        從繫結資料源中擷取相關聯的IDataSource對象,使用者必須是通過設定DataSourceID屬性來進行資料繫結的,否則將會返回一個Null 參考。

        看一下IDataSource這個介面:1public interface IDataSource
        2{
        3    event EventHandler DataSourceChanged;
        4
        5    DataSourceView GetView(string viewName);
        6    ICollection GetViewNames();
        7}

        可以看到得到IDataSource對象之後,就可以獲得當前綁定的DataSoutceView了。另外當DataBoundControl捕獲到IDataSource對象的DataSourceChanged事件後,會主動進行重新綁定。

           GetData
        從繫結資料源中擷取用於執行資料操作的 DataSourceView對象,通過該對象資料繫結控制項可以對資料來源進行各種操作,比如Select, Insert還有Update。

        2.  頁面生命週期
        DataBoundControl在頁面生命週期中定義了一些時機來進行資料繫結的處理:

          OnPagePreLoad
        如果是頁面進行第一次請求的話,則控制項要求進行資料繫結。另外如果是一次PostBack的話,並且控制項仍然沒有進行資料繫結,同時Enable ViewState,控制項也會要求資料繫結。
        見下面的代碼:  1protected override void OnPagePreLoad(object sender, EventArgs e)
         2{
         3    base.OnPagePreLoad(sender, e);
         4    if (this.Page != null)
         5    {
         6        if (!this.Page.IsPostBack)
         7        {
         8            base.RequiresDataBinding = true;
         9        }
        10        else if (base.IsViewStateEnabled && (this.ViewState["_!DataBound"] == null))
        11        {
        12            base.RequiresDataBinding = true;
        13        }
        14    }
        15    this._pagePreLoadFired = true;
        16}

        這就是為什麼在設計時只設定資料繫結控制項的DataSourceID,在運行時控制項會自動進行資料繫結。

           OnLoad
        如果說在OnPreLoad階段沒有進行資料繫結的話,在OnLoad階段控制項還會進行檢查,並且嘗試進行資料繫結如果條件合適的話。

        3。小結
        DataBoundControl實現了資料繫結控制項的準系統,例如從資料來源中擷取資料,以及如何操作資料源。其衍生類別所作的應該是如何展現資料,以及如何利用其提供的介面來操作資料源。

        相關樣本大家可以參考MSDN文檔:
        http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.databoundcontrol.aspx

        下一節將會講述HierarchicalDataBoundControl控制項。


        相關文章

        聯繫我們

        該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

        如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

        A Free Trial That Lets You Build Big!

        Start building with 50+ products and up to 12 months usage for Elastic Compute Service

        • Sales Support

          1 on 1 presale consultation

        • After-Sales Support

          24/7 Technical Support 6 Free Tickets per Quarter Faster Response

        • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.