Welcome 微信登录

首页 / 网页编程 / ASP.NET / ASP.NET 2.0中数据源控件的基础知识.

ASP.NET 2.0中数据源控件的基础知识.2010-12-04 MSDN Nikhil Kothari数据源控件是 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();
}
}