ASP.NET2.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();
 }
}
  如您所见,基本的理念是实现 GetView 以返回一个命名视图实例,以及实现 GetViewNames 以返回可用视图集。

  在此选择从 DataSourceControl 中派生。有一点是不易察觉的,事实上数据绑定控件要查找 IDataSource 界面,而 DataSource 控件通过实现 GetView 和 GetViewNames 来实现该界面。之所以需要界面是为了使数据源控件能够既是表格格式又是分层的(如果可能的话),在这种情况下从主要模型中派生并将另一个模型作为界面来实现)。其次,还允许在各种方案中转换其他控件,以使数据源的容量加倍。 另外还要注意公共 ZipCode 属性和返回强类型化 Weather 对象的 GetWeather 方法。此 API 适合于页面开发人员。页面开发人员无需考虑 DataSourceControl 和 DataSourceView。

[1] [2] 下一页  

时间: 2024-09-24 12:55:59

ASP.NET2.0中使用数据源控件之基础知识的相关文章

ASP.NET2.0中使用数据源控件之参数

asp.net|控件|数据|数据源 摘要:本文是介绍数据源控件的系列文章中的第二篇.在本文中,Nikhil 着重介绍如何添加支持以向针对控件的查询添加参数. 数据源控件需要使用参数值来指定需要选择哪些数据,或者指定如何修改数据以及修改什么数据.通常情况下,页面包含一些 UI,以定义那些必须在选择操作中使用的参数,而数据绑定控件提供了参数值来进行插入.更新和删除操作.但是,在任意一种情况下,都可能同时出现两种现象.在第 1 部分中,数据源控件揭示了 ZipCode 属性,该属性可进行声明性设置,或

ASP.NET2.0中使用数据源控件之异步数据访问

asp.net|访问|控件|数据|数据源|异步 摘要:本文是介绍数据源控件的系列文章中的第三篇.在本文中,Nikhil 着重介绍如何执行并封装异步数据访问,同时演示可重用的异步数据访问框架,该框架根据 Microsoft Visual Studio 2005 中的可用功能来建立. 在第 1 部分和第 2 部分中,建立了 WeatherDataSource 控件,该控件针对 weather.com(英文)所提供的 XML API 来运行,使用 WebRequest 和 WebResponse 来通

ASP.NET2.0中的ClientScriptManager 类用法

asp.net|client ASP.NET2.0中的ClientScriptManager 类用法-如何添加客户端事件 在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能用在页中的来自不同用户控件的相似脚本. <html>  <head>    <title>ClientScriptManager Example<

在Asp.Net2.0中可以方便的访问配置文件web.config,如判断debug设置,验证类型

Asp.Net2.0中我们可以方便的访问配置文件中,.NetFrameWork2.0新增加了 SystemWebSectionGroup 类. 允许用户以编程方式访问配置文件的 system.web 组. 比如判断web.config内是否为 debug="true",或者判断身份验证形式 SystemWebSectionGroup ws = new SystemWebSectionGroup(); CompilationSection cp = ws.Compilation; 用cp

asp.net2.0中导出EXCEL时内容为什么始终为空?[高分]

问题描述 asp.net2.0中导出EXCEL时内容为什么始终为空?实现方式,首先生成HTML摸板[格式如下,内容太长删除了一些]privateStringBuilderpHead=newStringBuilder();privateStringBuilderpBody=newStringBuilder();privateStringBuilderpFoot=newStringBuilder();publicRptSpareQuery(){pHead.Append("<htmlxmlns:

ASP.NET2.0中的超链接

问题描述 ASP.NET2.0中的超链接控件的下划线怎麽能让它消失,鼠标移过去后下划线又显示出来 解决方案 解决方案二:a:hover{text-decoration:none}

在ASP.NET2.0中通过Gmail发送邮件的代码_实用技巧

    在这里我们主要是使用Gmail,究其原因,是因为,我在使用Gmail的邮箱发送邮件的时候,遇到一小小的困难,而使用163等邮箱的时候,没遇到这个问题.     在ASP.NET2.0中,发送邮件是很简单的,我们主要使用来自命名空间System.Net.Mail中的几个类,MailMessage和SmtpClient.     核心代码是很简洁的,如下:     复制代码 代码如下:  string to = "这里填写接收者的Email地址";      string from

asp.net2.0中如何动态增加删除表格,在增加表格的同时能增加下拉列表控件?在线等

问题描述 asp.net2.0中如何动态增加删除表格,在增加表格的同时,表格中增加下拉列表控件>该如何实施?谢谢! 解决方案 解决方案二:昨晚天刚用JS写一个,给个参考吧-----------<scripttype="text/javascript">//印刷机组信息varmachineStr='<%=machineStr%>';//可开计划的产品编号和名称信息varproductionStr='<%=productionStr%>';//将印

原创:在ASP.NET2.0中实现主页嵌套

asp.net|原创 现在的很多商业公司都设有不同的部门,而这些部门在公司的网站上都有自己的子网站.一般情况下,每一个部门都会根据自己的需要来维护各自的网站.这样做虽然会使公司的网站显得丰富多彩,但这却会对用户的访问带来不便,也就是说,由于各个部门的子网站没有保持一致性而使用户在浏览网站时造成了困难.幸运的是,ASP.NET2.0为我们提供了一种解决方案,这就是主页嵌套. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com: