快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

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

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号