1
DataTable,DataView 和 DataGrid 中一些容易混淆的概念
一、DataTable
DataTable 表示内存中数据的一个表,它完全是在内存中的一个独立存在,包含了这张表的全部信息。DataTable 可以是从通过连接从
数据库中读取出来形成的一个表,一旦将内容读到 DataTable 中,此 DataTable 就可以跟数据源断开而独立存在;也可以是完全由程序自
己通过代码来建立的一个表。
◆ DataColumn
一个表是由行和列组成的一个两维的结构。表的结构是由 DataColumn 对象的集合组成,DataColumn 对象集合可由 DataTable.Columns
属性中能获取到,通过定义每一列的数据类型来确定表的架构,类似数据库中定义表。定义完表的结构就可以根据结构来生成 DataRow,
用 DataTable.NewRow()方法来生成此 DataTable 结构的新行。
一个 DataTable 是由 DataRow 的集合组成的, DataRow 的集合这个可以由 DataTable.Rows 属性来访问。
DataTable 还可以通过现有的列用 Expression 属性的表达式创建一些列。
1、创建计算出的列
比如:已经有了一个表结构,表中有一个 DataColumn 的集合,其中有一个叫 UnitPrice 的列,你可以新建一个 DataColumn,设置好
ColumnName,再设置此列的表达式,DataColumn.Expression = "UnitPrice * 0.086",这个列的值就是名字为 UnitPrice 的列计算出来的,
在创建表达式时,使用 ColumnName 属性来引用列。
2、第二个用途是创建聚合列
聚合列聚合通常沿着关系执行(有关关系的描述见下面 DataRelation 部分),如果 order 表有名为 detail 的子表,两个表之间通过
order.orderid 和 detail.orderid 两个列建立一个关系 DataRelation 对象名为“order2detail”,在主表 order 中就可以建立一个聚合列,将计
算每个 order 在 detail 表中含有的所有 item 的价格的和:DataColumn.Expression = “sum(child(order2detail).price)",child(order2detail)
表
示通过关系 order2detail 联系到的子表,child(order2detail).price 就表示子表的 price 列。
◆ DataRow
DataRow 对象没有直接在代码中使用的构造函数,一般是从具有一定结构的 DataTable 用 NewRow()方法来新建一个 DataRow 对象。
一个 DataRow 根据其是独立的,还是属于某个 DataTable,是否修改过,是否被 DataTable 删除等等不同的情况有不同的状态,由
DataRow.RowState 属性公开,如下表:
成员名称 说明
评论0