ASP.NET2.0中使用資料來源控制項之參數

來源:互聯網
上載者:User
asp.net|控制項|資料|資料來源 摘要:本文是介紹資料來源控制項的系列文章中的第二篇。在本文中,Nikhil 著重介紹如何添加支援以向針對控制項的查詢添加參數。

  資料來源控制項需要使用參數值來指定需要選擇哪些資料,或者指定如何修改資料以及修改什麼資料。通常情況下,頁麵包含一些 UI,以定義那些必須在選擇操作中使用的參數,而資料繫結控制項提供了參數值來進行插入、更新和刪除操作。但是,在任意一種情況下,都可能同時出現兩種現象。在第 1 部分中,資料來源控制項揭示了 ZipCode 屬性,該屬性可進行聲明性設定,或者以編碼來設定以響應使用者操作。參數被設計為以聲明性(且可擴充)的方式來完成此方案。

  引言

  Parameter 基類代表一個通用參數。Microsoft Visual Studio 2005 提供了諸如 QueryStringParameter 之類的參數,以便將資料從查詢字串參數請求到資料來源中。另一個非常有用的參數是 ControlParameter,該參數允許從任一控制項屬性中請求資料。如果內建參數類型不能滿足您的要求,則您可以定義自己的參數類型。這樣您就可以使頁面與粘接代碼不相關,而是將該代碼整齊地封裝在參數實現中。

  除了從不同的源中請求值,這些參數還可以跟蹤值的更改情況,並通知這些更改的所屬資料來源,進而引發資料來源更改通知,最終在資料繫結控制項中觸發資料繫結操作。簡而言之,這就是使用 ControlParameters 時,主要的聲明性詳細方案所依據的原理。

  樣本

  在此將向 WeatherDataSource 添加參數功能,然後進一步闡述。

public class WeatherDataSource : DataSourceControl {

    public static readonly string ZipCodeParameterName = "ZipCode";
    ...

    private ParameterCollection _parameters;

    private ParameterCollection Parameters {
        get {
            if (_parameters == null) {
                _parameters = new ParameterCollection();
                _parameters.ParametersChanged
                   += new EventHandler(this.OnParametersChanged);
                if (IsTrackingViewState) {
                    ((IStateManager)_parameters).TrackViewState();
                }
            }
            return _parameters;
        }
    }
    ...

    public string GetSelectedZipCode() {
         if (_parameters != null) {
            Parameter zipCodeParameter =
               _parameters[ZipCodeParameterName];
            if (zipCodeParameter != null) {
                IOrderedDictionary parameterValues =
                    _parameters.GetValues(Context, this);
                return (string)parameterValues[zipCodeParameter.Name];
            }
        }

        return ZipCode;
    }

    protected override void LoadViewState(object state) {
        object baseState = null;

        if (state != null) {
            Pair p = (Pair)state;
            baseState = p.First;

            if (p.Second != null) {
                ((IStateManager)Parameters).LoadViewState(p.Second);
            }
        }
        base.LoadViewState(baseState);
    }

    protected override void OnInit(EventArgs e) {
        Page.LoadComplete += new EventHandler(this.OnPageLoadComplete);
    }

    private void OnPageLoadComplete(object sender, EventArgs e) {
        if (_parameters != null) {
            _parameters.UpdateValues(Context, this);
        }
    }

    private void OnParametersChanged(object sender, EventArgs e) {
        CurrentConditionsView.RaiseChangedEvent();
    }

    protected override object SaveViewState() {
        object baseState = base.SaveViewState();
        object parameterState = null;

        if (_parameters != null) {
            parameterState = ((IStateManager)_parameters).SaveViewState();
        }

        if ((baseState != null) || (parameterState != null)) {
            return new Pair(baseState, parameterState);
        }
return null;
    }

    protected override void TrackViewState() {
        base.TrackViewState();
        if (_parameters != null) {
            ((IStateManager)_parameters).TrackViewState();
        }
    }
}

[1] [2] 下一頁  



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.