Dataview and Filter 视图和筛选器(深入研究数据访问)

*

ADO.NET 中有一层对象,它们专用于为您正在使用的任意数据源创建抽象模型。这样的集合包括如 “数据集”“数据表”DataRow“数据视图”DataRelation 等的对象。

所有这些对象都是在 System.Data 命名空间中定义的。无论您的目标是什么编程环境 - Windows 窗体、Web 窗体还是 Web 服务,它们形成的这个抽象模型都可以使您使用相同的编程接口。

在实际的应用程序中,这些对象大多最终会操作和呈现从 SQL Server 之类的关系型 DBMS 中提取的数据。不过,可以向它们填充任何数据,而不必考虑物理存储媒体。

您可以使用 “数据集” 对象来打包和关联数据表。只要您需要处理数据表格,就可能通过全套编程技巧来充分利用 DataTable 类。DataRow 对象可用于通过编程方式呈现表中任何一行的数据。

这三个对象都会对数据进行打包,但具有不同的逻辑聚合级别。“数据集”“数据表” 和其他元素构成的集合。“数据表”DataRow 和其他元素构成的集合。DataRow 是字段和其他元素构成的集合。不过,开始对包含的数据进行筛选和排序时,这些对象都没有相应的内置功能。

ADO.NET 提供了一些类来帮助完成数据驱动的应用程序这一极其重要方面的操作。截止到 .NET Beta 2,这些对象中最重要的两个是 “数据视图”DataViewManager

注意,DataViewManager 是 Beta 2 特有的类。在 Beta 1 中,相应的功能由 DataSetView 完成。

自定义数据视图

DataView 类用于表示 “数据表” 的自定义视图。“数据表”“数据视图” 之间的关系受众所周知的设计模式 - 文档/视图模型规则所控制。其中,“数据表” 充当文档,而 “数据视图” 则作为视图。

在任何时候,对于相同的基础数据您都可以有多个不同的视图。更重要的是,对于每个试图您都可以将其作为具有自己的一套属性、方法和事件的独立对象进行管理。这也代表了相对于 ADO 的一个巨大飞跃。

ADO 记录集是您能够定义筛选字符串。一旦您设置了这种字符串,则只有匹配所指定条件的记录才能用于进行读写。Filter 属性的工作原理与动态的 WHERE 子句很相似。它只是从同一记录集对象上的视图隐藏了某些记录。

在 ADO 中,您从来没有独立的视图对象。一个经过筛选的记录集总是同一个对象,只不过显示的记录比它的实际数量少一些而已。

如果您不需要同时操作几个不同的视图,上述问题就不是什么大问题。编程接口使得记录集既可以是表,也可以是一个具体的视图。不过,在创建时,两者不可能同时发生。在任何时刻,记录集要么是没有设置筛选字符串时的表,要么是激活了筛选字符串的视图。

记录集克隆提供了一个处理这种结构限制的很好方法。正如克隆和 多利 表案例,第一部分中解释的那样,克隆记录集是一个相对轻量型的操作,因为它不复制数据,只是复制记录集的基础结构。要管理相同数据的两个或多个视图,您可以利用两个或多个克隆,其中每个克隆都设置相应的筛选字符串。


图 1. 在 ADO 中管理同一记录集的不同视图

在 ADO.NET 中,您可以依赖于为即席 “数据视图” 对象提供的新设计的对象模型。ADO.NET 的 “数据视图” 对象表示某个给定数据表的自定义视图,但您可以将其作为单独的对象进行处理。“数据视图” 保留了对表的引用,并允许更新操作。


图 2. 在 ADO.NET 中管理同一数据表的不同视图

从功能上来说,使用 ADO 记录集克隆或特殊的视图对象完成的是同样的功能,因为两者都使您能够应用筛选,对所选的行进行操作,以及管理多个视图。

而在设计有效性、灵活性甚至是简洁性方面,毫无疑问,ADO.NET 方法更加卓越。

深入研究 DataView 对象

“数据视图” 对象是一个从 MarshalByValueComponent 继承的类,它会实现一些帮助器接口,从而使得该对象本身可用于数据绑定控件。

Public Class DataView
Inherits MarshalByValueComponent
Implemen
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值