广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-05 08:31:41 次阅读 稿源:互联网
    零七广告

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

      Microsoft ASP.NET 提供了 ParameterCollection,您可以完全按原样使用该集合。它同时包含更改跟踪和状态管理功能。您只需相应地调用该集合的 API 来合并这些功能,另外还可以在控件外将该集合揭示为属性。在上述代码中,需要注意的关键点为:

      ·该数据源控件揭示了一个 ParameterCollection 类型的属性,以使开发人员能够添加表示要使用的邮政编码值的参数。如果已经设置了参数,则使用该参数;否则,将使用 ZipCode 属性值。

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告