ADO.NET中的视图和过滤器
2005-11-30 16:58:13 来源: 作者: 点击:
DataViewManager类DataTable对象的
DefaultView属性用来返回一个
DataView对象,作为数据表中内容的默认视图。它按照自然顺序读取数据并显示表中所有的行,而不使用任何过滤。
| theMasterGrid.DataSource = m_ds.Tables("Employees").DefaultView |
如果需要数据特定的视图,你可以进行排序并/或对DefaultView对象直接进行过滤。
m_ds.Tables("Employees").DefaultView.Sort = "lastname" theMasterGrid.DataSource = m_ds.Tables("Employees").DefaultView |
DataViewManager类是用来存储DataSet中所有表的视图设置。
可以通过传递一个合法的非空的DataSet给类的构造函数来创建DataViewManager
Dim dvm As DataViewManager dvm = New DataViewManager(m_ds) |
也可以通过DataSet对象的DefaultViewManager属性直接得到:
| Dim dvm As DataViewManager = m_ds.DefaultViewManager |
重要的是DataViewManager类是同一个DataSet相关联的。下面是另一种可行的方法:
Dim dvm As New DataViewManager() dvm.DataSet = m_ds |
DataViewManager最重要的属性是DataViewSettings,一个DataViewSetting对象的集合。
Dim dvs As DataViewSetting dvs = dvm.DataViewSettings("Employees") dvs.Sort = "lastname" |
DataViewSetting对象包含了表视图的参数信息。当将数据绑定到对数据敏感的控件时,使用DataViewManager而不是DataSet或DataTable可以保留你的视图设置(过滤和排序字段)
theMasterGrid.DataSource = dvm theMasterGrid.DataMember = "Employees" |
在这里,视图按照DataViewSetting中对Employees表指定的自动进行排序和过滤。换而言之,DataViewSetting类是对特定表的视图的一种缓存。
下一步
上述例子程序用filter实现了master/detail结构。如果使用.NET中特有的数据绑定控件(如datagrid),能够更好的达到这个目的。在以后的专栏中,我将论述内存中的数据关系,以及它们是如何影响master/detail结构的设计的。
对话:你是否需要控件或组件?
在.NET中有很多术语经常可以替代使用。这里特别指出的是:类,组件,对象和控件。在此,我提供了一张表,来表述每个术语的恰当的含义。我们经常将它们当成同义词。
需要牢记在心的是整个.NET架构是由类组成的。所以你从中得到的任何东西,首先,是一个类。在.NET环境中,控件和组件不是同一种类。至于对象,可以认为是运行着的.NET类的实例。
组件是一个特殊的类,它实现了Icomponent接口或派生于实现了Icomponent接口的类。
控件是提供了用户界面功能的组件。在.NET架构中,可以找到两类控件:客户端的Windows Forms 控件和ASP.NET server 控件。
Icomponent接口包含在Idisposable接口中,并提供了一种确定的方法清除资源。
Public Interface IComponent Inherits IDisposable |
这种释放资源的方法和标准的.NET垃圾收集器可以二者选一。通过实现Idisposable,你定义了一个Dispose方法。这样通过编程,你可以显式的释放对象而无须等待垃圾收集器来处理。
.NET组件知道怎样在应用程序域(application domain)中如何串联。这有两种方法:通过引用或通过值,基本功能分别内建于MarshalByRefComponet和MarshalByValueComponent类中。.NET component类,事实上,实现了Idisposable,但直接或间接继承了上述两个类中的一个。
应用程序域是一种轻量级进程。通过引用来列集对象意味着proxy/stub实体对会被创建并处理远程调用。而通过值则意味着该对象的序列化的拷贝传递越过域的边界。
控件是更特殊化的对象,它还提供了用户界面元素。当然,一个控件总是一个component,但反之不一定成立。