程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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

數據源控件是 Microsoft Visual Studio 2005 中引入的一種新型服務器控件,它們是數據綁定體系結構的一個關鍵部分,能夠通過數據綁定控件來提供聲 明性編程模型和自動數據綁定行為。本文及此系列中的後續幾篇文章將介紹實現 數據源控件的核心內容。

引言

簡而言之,數據源控件概括了一個數據存儲和可以針對所包含的數據執行的 一些操作。DataBound 控件通過其 DataSourceID 屬性與一個數據源控件相關聯 。大多數傳統的數據存儲要麼是表格格式,要麼是分層的,數據源控件也相應地 分為兩類。在此要介紹的是表格格式的數據源控件。

數據源控件自身並不能發揮多大作用;所有邏輯都封裝在 DataSourceView 派生的類中。至少有一個 DataSourceView 必須實現檢索(即 SELECT)一組行 的功能。它可以提供修改數據(即 INSERT、UPDATE 和 DELETE)的功能(可選 )。數據綁定控件可通過各種 Can??? 屬性來檢查啟用功能集。數據源控件本身 只是一個或多個唯一命名視圖的容器。依據慣例,默認視圖可以按其名稱進行訪 問,也可以為空。不同視圖之間是否存在關系或者存在怎樣的關系可以根據每個 數據源控件的實現情況來進行適當的定義。例如,某個數據源控件可能會通過不 同的視圖對同一個數據提供不同的經篩選的視圖,或者可能會在輔助視圖中提供 一組子行。可使用數據綁定控件的 DataMember 屬性來選擇某個特殊的視圖(如 果該數據源控件提供了多個視圖)。請注意,Whidbey 中的所有內置數據源控件 目前都不提供多個視圖。

最後再介紹一點內容。數據源控件(及其視圖)會實現兩組 API。第一組 API 是就四種常用的數據操作而定義的一個抽象界面,以常規方式從任一數據綁 定控件中使用。第二組是可選的,它使用其表示的域或數據存儲方面的術語來定 義,通常被強類型化,且面向應用程序開發人員。

示例

在這些文章中,將實現一個 WeatherDataSource,它將針對由 weather.com (英文)提供的 REST(英文)XML API 來工作,以便根據郵政編碼來檢索天氣 信息。通常會首先實現派生的數據源控件。

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 {
    string s = (string)ViewState["ZipCode"];
    return (s != null) ? s : 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 };
  }
  public Weather GetWeather() {
   return CurrentConditionView.GetWeather();
  }
}

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