資料源控件是 Visual Studio 2005 引入的新型伺服器控件,構成宣告式資料綁定架構的核心。本文解析其兩大核心類別 DataSourceControl 與 DataSourceView 的職責分工,並以 WeatherDataSource 為例示範完整實作流程。
DataSourceView。資料綁定控件透過 DataSourceID 關聯控件,DataMember 選擇特定 View。Can* 屬性)。public class WeatherDataSource : DataSourceControl {
public static readonly string CurrentConditionsViewName = "CurrentConditions";
private WeatherDataSourceView _currentConditionsView;
private WeatherDataSourceView CurrentConditionsView {
get {
if (_currentConditionsView == null)
_currentConditionsView = new WeatherDataSourceView(this, CurrentConditionsViewName);
return _currentConditionsView;
}
}
public string ZipCode {
get { return (string)ViewState["ZipCode"] ?? String.Empty; }
set {
if (String.Compare(value, ZipCode, StringComparison.Ordinal) != 0) {
ViewState["ZipCode"] = value;
CurrentConditionsView.RaiseChangedEvent();
}
}
}
protected override DataSourceView GetView(string viewName) {
if (String.IsNullOrEmpty(viewName) ||
String.Compare(viewName, CurrentConditionsViewName, StringComparison.OrdinalIgnoreCase) == 0)
return CurrentConditionsView;
throw new ArgumentOutOfRangeException("viewName");
}
protected override ICollection GetViewNames() {
return new string[] { CurrentConditionsViewName };
}
// 強型別應用程式層級 API
public Weather GetWeather() {
return CurrentConditionsView.GetWeather();
}
}
GetView/GetViewNames:提供 View 發現機制。ViewState 儲存屬性 (ZipCode):支援宣告式設定與回傳持久化。RaiseChangedEvent:屬性變更通知資料綁定控件重新繫結。GetWeather()) 供應用程式代碼直接呼叫。ParameterCollection 支援 ControlParameter、QueryStringParameter 等宣告式參數。IAsyncDataSource、BeginExecuteSelect/EndExecuteSelect。DataSourceCache 實作資料層級快取策略。掌握資料源控件基礎架構,是開發自訂資料源控件、整合舊有資料存取層、擴充資料綁定功能的必經之路。