搜狐首页-新闻-体育-娱乐-财经-IT-汽车-房产-家居-女人-TV-ChinaRen-邮件-博客-BBS-搜狗 

数码天下 > 网狐学园-全中国人的电脑学习中心 > 程序开发-网狐学园 > 程序设计其他
ASP.NET2.0开发中使用数据源控件之基础知识
时间:2006年02月14日10:00 我来说两句(0)  

 
作者:Nikhil Kothari

25亿像素的大照片
P2P视频下载60%为情色
两大浏览器龙虎争霸
最佳创意产品NuLOOQ
迅雷存在严重DDOS漏洞
Windows的环保卫士
Vista和XP响应速度相近 用注册表砌安全墙
插件让IE向Maxthon看齐 把摄像头变3D扫描器
搜狐数字艺术博客大赛 低端显卡Aero亦流畅
搜狗拼音输入法 | 暴风影音 | WinRAR | FlashGet | 瑞星卡卡 | Firefox | Picasa
搜狗工具条 | ACDSee | Maxthon | Internet Explorer | Windows Live Messenger


  数据源控件是 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。

  下一步是实现数据源视图本身。此特定示例仅提供了 SELECT 级功能(这只是最低要求,也是在此方案中唯一有用的功能)。

private sealed class WeatherDataSourceView : DataSourceView {

private WeatherDataSource _owner;

public WeatherDataSourceView(WeatherDataSource owner, string viewName)
: base(owner, viewName) {
 _owner = owner;
}

protected override IEnumerable ExecuteSelect(
 DataSourceSelectArguments arguments) {
  arguments.RaiseUnsupportedCapabilitiesError(this);

  Weather weatherObject = GetWeather();
  return new Weather[] { weatherObject };
 }

 internal Weather GetWeather() {
  string zipCode = _owner.ZipCode;
  if (zipCode.Length == 0) {
   throw new InvalidOperationException();
  }

 WeatherService weatherService = new WeatherService(zipCode);
 return weatherService.GetWeather();
}

internal void RaiseChangedEvent() {
 OnDataSourceViewChanged(EventArgs.Empty);
}
}

  默认情况下,DataSourceView 类从诸如 CanUpdate 等的属性返回 false,而从 Update 和相关方法抛出 NotSupportedException。在此,在 WeatherDataSourceView 中唯一需要做的就是替代抽象的 ExecuteSelect 方法,返回包含“选定”天气数据的 IEnumerable。在实现过程中,使用了帮助程序 WeatherService 类,该类仅使用 WebRequest 对象来查询 weather.com(英文),方法是使用所选的邮政编码(这没什么特别的)。

  您可能注意到了,ExecuteSelect 被标记为受保护。数据绑定控件实际调用的是在回拨中传递的公共(和密封)Select 方法。Select 的实现会调用 ExecuteSelect,并调用回拨与得到的 IEnumerable 实例。这种模式非常古怪。这其中有一个原因,此系列随后的文章中将会加以说明。请稍候...

  下面是该用法的示例:

Zip Code: <asp:TextBox runat="server" id="zipCodeTextBox" />
<asp:Button runat="server" onclick="OnLookupButtonClick" Text="查找" />
<hr />

<asp:FormView runat="server" DataSourceID="weatherDS">
<ItemTemplate>
<asp:Label runat="server"
Text='<%# Eval("Temperature", "当前温度是 {0}。") %>' />
</ItemTemplate>
</asp:FormView>
<nk:WeatherDataSource runat="server" id="weatherDS" ZipCode="98052" />

<script runat="server">
private void OnLookupButtonClick(object sender, EventArgs e) {
weatherDS.ZipCode = zipCodeTextBox.Text.Trim();
}
</script>


  此代码设置了邮政编码来响应用户输入,这会使数据源发出更改通知,从而使绑定的 FormView 控件执行数据绑定并更改显示。

  现在,数据访问代码就被封装在数据源控件中。此外,通过此模型,weather.com(英文)能够发布一个组件,该组件还可以封装特定于其服务的详细信息。但愿它会好用。此外,抽象的数据源界面允许 FormView 仅针对天气数据进行工作。

  在下一篇文章中,将增强数据源控件的功能,使其能够自动处理用来查询数据的筛选值(即邮政编码)的更改。


热门新闻排行
01 广州Vista盗版江湖调查 全部破解版本大曝光
02 Windows Vista不兼容的应用程序,还有谁?
03 中国海贼版Vista入侵日本 "番茄花园"打头阵
04 挑战视觉享受极限 五款流行多媒体播放器比拼
05 Vista SP1发布计划已定 Windows XP SP3不再来
热门教程排行
01 安装系统不求人 就算没有光驱和软驱也能行
02 让电脑运转如飞 Windows Vista九则加速技巧
03 逐一辩驳:破解Windows Vista的四个性能谣言
04 专家经验谈:Excel工作表的几点设计策略
05 整容大法!Photoshop简单教程之美女去斑篇
蜘蛛侠主题Mod美图赏

蜘蛛侠主题Mod美图赏
两款可爱的iPod音箱

两款可爱的iPod音箱
小心别丢了 全球最袖珍5款科技玩意

全球最袖珍5款科技玩意
最强的概念车设计:超级巴士

概念车设计:超级巴士
LLADRó瓷器诠释人性情感

LLADRó瓷器诠释人性
德国家具设计精选作品

德国家具设计精选
最具创意的多功能床(图)

最具创意的多功能床
2006离生活最近的创意

2006离生活最近的创意
欢迎访问:软件频道 下载频道 网狐学院 数字艺术 考试 病毒与安全 创意赏析

出处: MSDN

(责任编辑:luwei)



共找到 212,795 个相关新闻.

我来说两句 全部跟贴(0条) 精华区(0条) 辩论区(0条)

用户:  匿名发表:  隐藏地址:


设为辩论话题      


精彩图片新闻


激情四溢沙滩宝贝


数码公社专栏

相关链接





搜狐短信 小灵通 性感丽人 言语传情
三星图铃专区
[周杰伦] 千里之外
[誓 言] 求佛
[王力宏] 大城小爱
[王心凌] 花的嫁纱
精品专题推荐
短信企业通秀百变功能
浪漫情怀一起漫步音乐
同城约会今夜告别寂寞
敢来挑战你的球技吗?
 精彩生活 

星座运势 每日财运
花边新闻 魔鬼辞典
情感测试 生活笑话


今日运程如何?财运、事业运、桃花运,给你详细道来!!!





菊花台
迷迭香
青青河边草
丁香花
原来你也在这里
爱如空气
不要再来伤害我

公社热图


·北美惊现若干神秘UFO/图
·范冰冰真空写真露点[图]
·传说中国内第一美女车模


频道精彩推荐

·禽流感疫情 伊朗核问题
·埃及客轮沉没
·德国世界杯
·火车票交易查询
·TD成为我国通信行业标准
·霍元甲 2006都灵冬奥会
·第48届格莱美颁奖典礼
·2006NBA全明星赛
·达喀尔拉力赛
·华裔孕妇在美被驱逐流产






不怕不怕
吉祥三宝
桃花朵朵开
千里之外
大城小爱
梁祝
迷糊娃娃可爱粉红卡通
四季美眉给你最想要的

news
搜狐分类 ·搜狐招商


创意就是这么简单
女星豪乳尺码大曝光
·现场抓拍明星着透视装
·芙蓉二代横空出世
·央视女主持辞职拍艳照
·徐若瑄15岁全裸写真曝光
·拍摄:娱乐圈性交易过程
·抓拍模特海滩宽衣解带
·外国女生流行拍的艺术照
·台湾十大波霸照片大比拼
·网络美女全裸人体摄影
·范冰冰终于还是脱了

推荐企业
2006年世界电信展 诺基亚 瑞星 联想 摩托罗拉 三星 清华紫光 金山 索尼爱立信 索尼
给编辑写信



设置首页 - 搜狗输入法 - 支付中心 - 搜狐招聘 - 广告服务 - 客服中心 - 联系方式 - 保护隐私权 - About SOHU - 公司介绍 - 全部新闻 - 全部博文
Copyright © 2018 Sohu.com Inc. All Rights Reserved. 搜狐公司 版权所有
搜狐不良信息举报邮箱:jubao@contact.sohu.com