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

ASP.NET 2.0數據源控件的參數

編輯:關於ASP.NET

數據源控件需要使用參數值來指定需要選擇哪些數據,或者指定如何修改數 據以及修改什麼數據。通常情況下,頁面包含一些 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. 下一頁:
Copyright © 程式師世界 All Rights Reserved