DataSource控件仅含有一个自定义的(不包含那些继承自父类的事件)也是非常重要的事件—dataAvailable。当DataSource控件中的数据加载完成时激活这个事件。从随同MS AJAX的示例Tasklist中,我们可以看到这个事件的典型应用,如下:
列表2—控件DataSource的事件dataAvailable的典型应用场所
<components> <dataSource id="listsDataSource" serviceURL="TaskListDataService.asmx" /> <dataSource id="itemsDataSource" serviceURL="TaskItemDataService.asmx"> <dataAvailable> <invokeMethodAction target="listsDataSource" method="load" /> </dataAvailable> </dataSource> |
在此,以声明方式定义了两个DataSource控件。当第二个DataSource itemsDataSource完成加载后,然后调用第一个DataSource的load方法。
下表列出了相应于DataSource控件中的自定义方法。
广州网站建设,网站建设,广州网页设计,广州网站设计
方法名 | 描述 |
load | 从服务器端检索数据(根据当前DataSource的配置对服务器端进行查询)。 |
Save | 根据当前DataSource的配置,显式地把数据写向或更新到服务器端—也即是把客户端所作改变保存回服务器。 |
下面是控件DataSource的方法Save在文件PreviewScript.js中的定义:
列表 3
function Sys$Preview$Data$DataSource$save() { //……省略 if (this._serviceType === Sys.Preview.Data.ServiceType.DataService) { var method = "SaveData"; var params = {changeList: changes, parameters: this._parameters, loadMethod: this._loadMethod}; var onComplete = Function.createDelegate(this, this.onLoadComplete); var onError = Function.createDelegate(this, this.ready); this._request = Sys.Net.WebServiceProxy.invoke(this._serviceURL, method, false, params, onComplete, onError, this, this._timeout); } else { throw Error.createError("Save is not supported in Handler mode."); } |
从上面的代码中明显看出,只有当属性serviceType的类型被设置为类型DataService时才可以使用Save方法。当我们定义将用于在客户端消费的web服务时这是相当重要的。关于其中的“神秘”方法—SaveData,我们将留于下篇中再讨论。
有关控件DataSource中的自定义属性,请参考如下表格。
属性名 | 描述 |
autoLoad | Boolean值,用于指明是否这个数据源控件在初始化后将自动地从服务器端加载数据。注意,如果你想在页面加载时就应该指定数据源的内容,则应使用initialData属性;否则的话,在页面加载后,还需要一次到服务器端的信息馈送。 |
initialData | 伴随页面的加载提供的初始数据。有些场所下,当用户第一次进入页面时就应该在页面中显示一些初始的数据—例如某个列表的第一页的记录。 |
isDirtyAndReady | 指示是否当前DataSource已经完成数据加载,并且数据非空,且数据没有发生改变。 |
loadMethod | 另一个有些“神秘”的方法(我们将在下篇的关于DataService处讨论它)。 |
rowCount | 返回data属性中实际数据的行数。 |
serviceURL | Web服务的URL,DataSource可以从中检索数据。注意,你应该总是设置这个属性。 |
parameters | 添加到服务URL后的参数。仅用于当serviceType的类型设置为handler时。 |
serviceType | 用于指定web服务的类型,可以被设置为DataService或handler。缺省情况下(也是推荐的)值为DataService,这意味着你的服务要派生自Microsoft.Web.Services.DataService并且应该为典型的数据库CRUD操作提供内置的支持。 |
Id(定义于父类中) | 控件标识。 |
data | 检索自服务器端数据库中的数据,存储于客户端。注意:这个属性仅可以为Array类型或Sys.Preview.Data.DataTable类型。 |
isReady | 指示是否这个DataSource已经完成从服务器加载数据。你可以把这个属性绑定到一个数据绑定控件的enabled属性上,以便当数据正处于加载过程时禁止使用此绑定控件。 |
下面,我们来讨论另一个DataSource相关控件—DataView。
(二)DataView控件
一般说来,我们可以从服务器端获取数据并且通过使用DataSource把它们存储于客户端,然后使用DataTable对象修改我们在客户端取得的数据。然而,有时我们需要在实际展示数据前作一些“修饰”—例如,当数据包含成千上万行记录时我们可以对页面加以分页显示,或者我们的用户仅对其中的一少部分数据感兴趣。为此,MS AJAX框架又引入了DataView和DataFilter两个对象。
DataView控件中定义的属性列表。
广州网站建设,网站建设,广州网页设计,广州网站设计
属性名 | 描述 |
data | 被修饰的实际数据,类型为Sys.Data.IData或Sys.IArray。 |
filteredData | 过滤数据,例如分页数据或经排序的数据。 |
filters | 一个DataFilter对象的集合,用于过滤数据。你可以为DataView指定一组过滤器并把它们逐个应用于你的数据。 |
hasNextPage | 是否存在下一个页面。 |
hasPreviousPage | 是否存在上一个页面。 |
length | 在当前页面中有多少行。 |
pageCount | 在当前DataView中有多少页。 |
pageIndex | 当前页面索引。 |
pageSize | 每一页中有多少行。如果你需要对你的数据进行分页,则应该设置这个属性。 |
sortColumn | 排序记录行所依据的列。如果你需要排序,则应该设置这个属性。 |
sortDirection | 排序的方向,或者是Ascending(缺省的值)或者是Descending。 |
注意,这个DataView对象仅有一个自定义方法—sort。这个方法将根据sortColumn属性和sortDirection属性对数据进行排序操作。此外,你还可以使用命名空间Sys.Preview.UI.Data中的另外两个控件—DataNavigator和SortBehavior来帮助你实现分页和排序。在此,为了完整起见,我们还想对DataFilter对象作一简介。