Sys.Data.DataSource
DataSource数据源有如下属性:
- data:从服务器端取回并保存在客户端的数据。
- autoLoad:布尔值,用来指定当这个数据源被初始化之后是否自动开始从服务器端取得数据。如果您需要在页面加载时就指定该数据源的内容,应该使用initialData属性代替,因为它避免了自动加载带来的在页面被加载后立刻发生的那一次与服务器的通信。
- initialData:随着页面加载而同时被送往数据源的数据。在好多情况中,当用户第一次访问某个页面时候就需要使用一些初始的数据,例如某个列表的第一页的记录。这时候我们可以使用Atlas的服务器端控件InitialData来将这部分数据与页面源文件一起,在这次HTTP请求中发送给客户端,以避免在页面传输完成后立刻发生第二次请求。
- isDirtyAndReady:表示该数据源是否完成了从服务器端的加载,且取得到了不为空的数据集合,且数据没有被修改过。
- isReady:表示该数据源是否完成了从服务器端的加载。您可以将这个属性绑定到您的数据显示控件的enabled属性上,这样在数据源加载的过程中数据显示控件将被禁用,以避免误用户的操作。
- rowCount:数据的条目数。
- serviceURL:数据源请求数据的Web Service的URL。您必须提供这个属性。
- parameters:Web Service的参数。仅当serviceType属性为Handler时才需要设置。
- serviceType:服务器端Service的类型。可选DataService 或Handler。默认值与推荐值是DataService,代表您的Service类继承于Microsoft.Web.Services.DataService,拥有内建的CRUD方法调用机制。
DataSource数据源有如下方法:
- load:从服务器取得数据。
- save:将客户端对数据的修改提交给服务器保存。只在serviceType属性设置成DataService时候有效。
DataSource数据源有如下事件:
- dataAvailable:将在成功取得数据后被引发。
Sys.Data.XMLDataSource
XMLDataSource数据源有如下属性:
- autoLoad:布尔值,用来指定当这个数据源被初始化之后是否自动开始从服务器端取得数据。与DataSource数据源类似,如果您需要在页面加载时就指定该数据源的内容,应该使用initialDocument属性代替。
- data:XML数据,解析自document属性值。
- document:从服务器端取得的包含XML文档的string。
- initialDocument:与DataSource数据源的initialData属性类似。同样的,您应该尽可能的使用这个属性而不是autoLoad属性。
- isReady:与DataSource的相应属性类似。代表该数据源是否加载并解析完成了XML数据。
- parameters:Web Service的参数。
- serviceURL:数据源请求数据的Web Service的URL。您必须提供这个属性。
- xpath:xpath字符串,用来在从document属性解析data属性时选择解析的path。
XMLDataSource数据源有如下方法:
- load:从服务器取得数据。
XMLDataSource数据源有如下事件:
- dataAvailable:将在成功取得数据后被引发。
Sys.Data.DataColumn
DataColumn类非常简单,只有如下几个很容易理解的属性:
- columnName:本列的名称。
- dataType:本列中的数据类型。
- defaultValue:本列中数据的默认值。
- isKey:本列中是否为DataTable的关键字段。
- readOnly:本列中的数据是否为只读属性。
Sys.Data.DataRow
DataRow类略显复杂,包含如下属性:
- $isDirty:该行是否经过修改并且尚未提交到服务器保存。
- $index: 该行在DataTable中的索引值。
- $selected:该行是否被选中。
还包含有如下事件:
- propertyChanged:当上述的三个属性被改变时被引发。
Sys.Data.DataTable
下面轮到DataTable了,DataTable类实现了Sys.Data.IData接口,该接口提供的方法在下面的方法列表中,这里不单说明。
DataTable对象有如下属性:
- columns:取得当前DataTable对象中DataColumn对象的集合。您可以对该集合进行添加,删除或修改等操作以修改该DataTable的Schema。
- keyNames:该DataTable对象中所有关键列的columnName属性集合。
- length:该DataTable对象中DataRow数目。
- isDirty:该DataTable对象中是否有DataRow被修改且尚未提交到服务器保存。
DataTable对象有如下方法:
- add:将传入的DataRow对象添加到当前的DataTable中。传入的DataRow对象必须与该DataTable有同样的Schema。推荐首先使用createRow方法来创建新行,然后作为本方法的参数。
- clear:清除当前DataTable的所有行。
- remove:根据传入的DataRow对象,删除当前DataTable的某一行。
- createRow:根据当前DataTable的Schema创建一个新行。
- getChanges:取得对该DataTable的修改。该方法的返回值有如下三个集合:
- updated:修改过的DataRow的集合。
- inserted:添加过的DataRow的集合。
- deleted:删除过的DataRow的集合。
- getColumn:根据传入的列名查找并返回该DataTable中的某个DataColumn对象。
- getRow:根据传入的索引值返回相应的DataRow对象。
- getItem:与getRow方法功能完全一样,估计是为了提供一个更加泛化的名称。
还有如下事件:
- collectionChanged:当DataTable的行被改变后被引发。
- propertyChanged:当以上的某个属性被改变后被引发。
DataView对象还有下面一个方法:
- sort:根据sortColumn属性和sortDirection属性对当前数据集合进行排序操作。
请注意,您可能需要两个位于Sys.Data.UI命名空间的控件:DataNavigator和SortBehavior,来帮助您实现分页和排序的功能。
DataFilter用来提供对数据的过滤功能。Atlas中的Sys.Data.DataFilter类被定义成所有Filter类的抽象基类。它提供了一个抽象方法,filter。所有的派生类都要采用自己的逻辑来实现这个方法,用来提供相应的过滤规则。
Atlas提供了一个内建的DataFilter:PropertyFilter,它可以根据集合中条目的某个属性值来过滤这个集合。
PropertyFilter有如下两个属性:
- property:这个Filter将应用于条目的哪个属性。
- value:期待的这个属性的值。只有该条目的这个属性的值等于这里指定的值的时候,该条目才能被这个Filter过滤出来。
DEMO:
Get DataTable from server
Server side code in C#:
[WebMethod] public DataTable GetDataTable() { DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("FirstName", typeof(string))); dt.Columns.Add(new DataColumn("LastName", typeof(string))); dt.Columns.Add(new DataColumn("Email", typeof(string))); dt.Rows.Add("Dflying", "Chen", "dflying@dflying.net"); dt.Rows.Add("Someone", "Else", "someone@someone.net "); return dt; }
Client side code in JavaScript:
function getDataTable() { MyWebService.GetDataTable(onComplete); } function onComplete(result) { var dataTable = result; }
href="http://dflying.dflying.net/plugins/plogeshi/styles/plogeshi.css" type="text/css" rel="stylesheet" />
Send DataTable to server
Client side code in JavaScript:
function sendDataTable() { MyWebService.SendDataTable(myDataTable); }
Server side code in C#:
[WebMethod] public void SendDataTable(DataTable someTable) { DataTable dt = someTable; }
Rows count of DataTable
var nRows = dataTable.length;
Get data in a single cell of DataTable
var data = dataTable.getItem(rowIndex).getProperty(colName);
Add a new row to DataTable
var oRow = { FirstName:'New', LastName:'Row', Email: 'new@new.com' } dataTable.add(oRow);
Update row
dataTable.getItem(rowIndex).setProperty(colName, value);
Delete row
dataTable.remove(dataTable.getItem(rowIndex));
DataTable changed
var hasChanges = dataTable.get_isDirty();
Get updated/inserted/deleted rows
var updatedRows = dataTable.getChanges().updated; var insertedRows = dataTable.getChanges().inserted; var deletedRows = dataTable.getChanges().deleted;
Get columns’ properties
var oCol = dataTable.getColumn(colName); var colName = oCol.get_columnName(); var colDataType = oCol.get_dataType(); var colDefaultValue = oCol.get_defaultValue();
Get DataTable from DataSet
DataSet is also an Atlas object, just like the ADO.NET object DataSet which may contain many DataTables.
var dataTable = dataSet[dataTableIndex];