ASP.NET 2.0数据源控件的参数

数据源控件需要使用参数值来指定需要选择哪些数据,或者指定如何修改数 据以及修改什么数据。通常情况下,页面包含一些 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();
   }
  }
}

时间: 2025-01-07 20:18:59

ASP.NET 2.0数据源控件的参数的相关文章

ASP.NET 2.0数据源控件的异步数据访问

在第 1 部分和第 2 部分中,建立了 WeatherDataSource 控件,该控件针对 weather.com(英文)所提供的 XML API 来运行,使用 WebRequest 和 WebResponse 来通过 HTTP 访问数据.迄今为止,均是同步访问该服务.因此, 页面处理被阻止,直到 Web 请求完成为止.此方法对于测试页面是有效的,在 小站点上也可能有效,但是在接收大量通信流量的站点上则会惨败:例如门户页 面,天气模块在其中可能非常常见. 引言 在线程池中有固定不变的大量线程可

ASP.NET 2.0 和数据绑定控件:新的角度,新的做法

asp.net|控件|数据 适用于:Microsoft ASP.NET 1.xMicrosoft ASP.NET 2.0 摘要:了解 ASP.NET 2.0 中的用于生成自定义数据绑定控件的工具是如何演变的.   本页内容 为什么需要新的数据源模型  ASP.NET 2.0 中的数据绑定控件  分析要点  数据绑定机制   列表控件  HeadlineList 示例控件  管理自定义集合  关于复合控件的一点讨论  小结 为什么需要新的数据源模型数据绑定是开发人员在 ASP.NET 1.x 中发

Scott Mitchell的ASP.NET 2.0数据教程之五:声明参数

返回"ASP.NET 2.0数据教程目录" 导言 在上一章的教程中,我们看了GridView.DetailsView和FormView 绑定到OjbectDataSource控件显示数据,ObjectDataSource调用了类ProductsBLL 的GetProducts()方法.方法GetProducts()返回一个有Northwind数据库的 Products表的所有记录组成的强类型数据表.类ProductsBLL还包含了其它返回部 分数据的方法:GetProductByPro

在ASP.NET 2.0中操作数据之五:声明参数_自学过程

导言 在上一章的教程中,我们看了GridView.DetailsView和FormView绑定到OjbectDataSource控件显示数据,ObjectDataSource调用了类ProductsBLL的GetProducts()方法.方法GetProducts()返回一个有Northwind数据库的Products表的所有记录组成的强类型数据表.类ProductsBLL还包含了其它返回部分数据的方法:GetProductByProductID(productID),GetProductsBy

ASP.NET 2.0的新增服务、控件与功能

asp.net|控件 [导读]全文介绍了ASP.NET 2.0中新增的控件和功能,包括Master Pages,Data Source控件.Skin的支持.GridView和Details View的引入,在此基础上,ASP.NET 2.0的安全模型得到了极大的提高,包括登录控件.角色管理器.个性化等等方面的支持,在类库方面也增加了许多新特性,如全新的代码分隔模型.客户端回调等等,让读者对于ASP.NET的新特性有一个全面的了解. 在首次公诸于众以来的短短四年中,ASP.NET业已成为在Wind

ASP.NET 2.0中实现模板中的数据绑定

asp.net|模板|数据 模板化的数据绑定控件为我们在页面上显示数据提供了根本的灵活性.你可能还记得ASP.NET v1.x中的几个模板化控件(例如DataList和Repeater控件).ASP.NET 2.0仍然支持这些控件,但在模板中绑定数据的语法已经被简化和改善了.本文将讨论在数据绑定控件模板中绑定数据的多种方法. 数据绑定表达式 ASP.NET 2.0改善了模板中的数据绑定操作,把v1.x中的数据绑定语法DataBinder.Eval(Container.DataItem, fiel

ASP.NET 2.0中保证应用程序的安全

asp.net|安全|程序 成员和角色管理器提供程序--现在ASP.NET 2.0包含了内建的成员和角色管理服务.由于这些服务都是提供程序驱动的(provider-driven),你可以轻易地变更它,或者用自定义实现来代替它. 登录控件--新的登录控件为站点的基于认证和授权的UI(例如登录窗体.创建用户窗体.密码取回.已登录用户或角色的定制UI)提供了基本模块.这些控件利用ASP.NET 2.0中的内建的成员和角色服务与站点所定义的用户和角色信息交互操作. 大多数Web应用程序的一个重要的部分是

ASP.NET 2.0 绑定高级技巧

asp.net|高级|技巧 1.简单数据绑定定 <!--ASP.NET 1.x data binding expression --><%# DataBinder.Eval(Container.DataItem, "Price") %><!--Equivalent ASP.NET 2.0 data binding expression --><%# Eval("Price") %><!--XML data bin

ASP.NET 2.0轻松实现数据库应用开发

asp.net|数据|数据库 前言: 第一次使用ASP.NET 2.0就被它强大的功能和超高的效率所吸引,原本繁杂的过程被简化到无法置信的容易,而且据微软的所言12月中文版的VS2005正式版将给我们带来更强劲的风暴.对ASP.NET 2.0逐渐深入后,便产生了想把自己学习中发现的问题和体会与大家交流,遂有此文.声明:本文所有演示示例均基于Visual Web Developer 2005 Express Beta2,Visual Web Developer 2005 Express Editi