基本概念
下面的概念非常重要,务必要掌握。 DataTable和Table
假定在一个简化的订单管理系统中,包括产品、客户、订单三个表:
Foxtable中有一个集合DataTables,通过该集合可以获得指定名称的表,例如: DataTables(\产品\) '产品表 DataTables(\客户\) '客户表 DataTables(\订单\) '订单表
实际上你是看不到DataTable的,你看到的是Table,也就是说,上面的三个图,实际上就是三个Table。
那么什么是Table呢?你可以这样理解,DataTable就像一个仓库,所有从数据文件中加载的数据,都存放在这里,而且这个仓库是不直接面对用户的;而Table就像一个展厅,是负责和用户打交道的,这个展厅(Table)从仓库(DataTable)中取得数据,并呈现给用户。
同样,Foxtable中也有一个集合Tables,通过该集合可以获得指定名称的Table,在没有建立关联的情况下,我们这个简化的订单管理系统包括三个Table,分别是: Tables(\产品\) Tables(\客户\) Tables(\订单\)
在初始的情况下,Table会从DataTable中提取所有数据呈现给用户,如果你设置了筛选条件,Table就会从DataTable提取符合筛选条件的数据,然后呈现给用户。
例如订单表有1000行数据,那么DataTables(\订单\)从头到尾,始终都会有1000行数据,不
受筛选的影响。而Tables(\订单\)却不一样,如果没有进行筛选,那么Tables(\订单\)也会包括所有数据,也就是1000行数据全部可见。如果现在从中筛选出产品为PD01的订单,且PD01的订单是200个,那么经过筛选后,Tables(\订单\)会包括200行数据,也就是你看到的那200个产品为PD01的订单。
所以关于DataTable和Table的关系,较为完整的描述是: ?
从数据文件加载到Foxtable中的数据,是存放在DataTable中的,它就像一个仓库,不直接面对用户;而Table就像一个展厅,是负责和用户打交道的,它根据指令从仓库(DataTable)中提取符合条件的数据,然后呈现给用户;通过菜单进行的日常数据管理工作,例如增加行、删除行、排序、筛选、汇总等等,都是在Table中进行的;除了编程,用户没有办法直接对DataTable进行操作,因为它是不可见的。 ? ? ?
在任何时候,DataTable都包括所有已经加载的行。
Table中的行,既可以排序,也可以筛选,所有Table中行的数量和顺序都是可变化的,我们平时所看到的、所操作的,都是Table中的行。
我们在Table中进行的任何操作,最终都会反映到DataTable,例如我们通过菜单在Table中删除行,DataTable也会删除一行。
关联表和Table
假定在上面这个简化的订单管理系统中,我们建立如下两个关联:
父表 产品 客户 子表 订单 订单 产品编号 客户编号 关联列 因为关联的建立,DataTable和Table不再是一一对应的关系,例如我选择产品表的时候,就会出现三个Table,分别是:
三个Table的作用为:
Tables(\产品\:主表,用于显示所有产品
Tables(\产品.订单\:如果在Tables(\产品\中选定一个产品,这里会显示该产品的全部订单。 Tables(\产品.订单.客户\:如果在Tables(\产品.订单\中选定一个订单,这里会显示该订单所属的客户。
同样在选择客户表的时候,也会出现三个Table: Tables(\客户\Tables(\客户.订单\Tables(\客户.订单.产品\
而选择订单表,出现的三个Table为: Tables(\订单\Tables(\订单.产品\Tables(\订单.客户\
由此我们可以看出,同一个DataTable可以有多个Table,例如下面三个Table: Tables(\产品\Tables(\订单.产品\Tables(\客户.订单.产品\
它们的数据全部来自于DataTables(\产品\。
由此可见,DataTable的数量是固定的,而Table的数量会随着关联的增加而增加,同一个DataTable可以有多个Table,每个Table都各取所需地从DataTable中提取数据呈现给用户。
概述
通过DataTables集合,可以获得指定名称的DataTable(表)。 例如:
Dim dt As DataTable dt = DataTables(\订单\) DataCol表示DataTable中的列。
通过DataCols集合,可以获得指定名称的DataCol(列)。 例如:
Dim dt As DataTable = DataTables(\订单\) Dim dc As DataCol = dt.DataCols(\日期\)
DataRow表示DataTable中的行。
通过DataRows集合,可以获得某一位置的DataRow(行)。 例如:
Dim dr As DataRow
dr = DataTables(\订单\).DataRows(0)
行是从0开始编号的,所以0表示第一行,1表示第二行。 通过列名称,我们可以得到或设置某一行指定列的内容。 例如:
Dim r As DataRow Dim v As Double
r = DataTables(\订单\).DataRows(0) r(\数量\) = 100 v = r(\折扣\)
由此可知,DataTable、DataRow、DataCol构成了表、行、列这样一个完整的结构体系,接下来我们具体介绍这三个对象。
常用属性
通过DataTables集合,可以获得指定名称的DataTable(表)。 例如:
Dim dt As DataTable dt = DataTables(\订单\)
如果要禁止编辑某个DataTable,只需将其AllowEdit属性设为False,例如: DataTables(\订单\).AllowEdit = False
在命令窗口执行上述代码,你会发现订单表的左上角出现一个锁形标记,表示此表已经被锁定,不能在其中输入数据。
如果你要取消锁定表,只需将其AllowEdit属性重新设为True: DataTables(\订单\).AllowEdit = True
下表列出了DataTable的常用设置属性,它们的用法和AllowEdit属性完全一样: 属性名 说明 AllowEdit AllowAddNew 是否允许修改表中数据 是否允许增加行 AllowClipBoard 是否允许复制粘贴数据 AllowInitialize AutoAddNew AllowDelete AllowLockRow 是否允许初始化此表 是否允许自动增加行,也就是在最后一行的最后一个单元格按回车键时,是否自动增加一行 是否允许删除行 是否允许锁定行 AllowUnlockRow 是否允许取消锁定行 我们在编辑数据的时候,如果按回车键或Tab键,光标会向右移到下一单元格,通过下面的属性,你可以改变这种默认的光标移动方式: 属性名 说明 EnterKeyActionDown 按回车键是否向下移到另一单元格 TabKeyActionDown 按Tab键是否向下移到另一单元格 例如你希望按回车键向下移动光标,而不是向右移动,只需将EnterKeyActionDown属性设为True即可:
DataTables(\订单\).EnterKeyActionDown = True 最后三个常用的属性为: 属性名 Name 说明 返回DataTable的名称 返回一个整数,表示DataTable的类型: 1 内部数据表 Type 2 内部查询表 3 外部数据表 4 外部查询表 5 临时表 HasChanges 逻辑型,判断DataTable的数据是否已经被修改 例如执行下面的代码,将列出所有已经修改过的DataTable: Output.Show(\已经修改的数据表:\) For Each dt As DataTable In DataTables If dt.Type = 1 Orelse dt.Type = 3 Then
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库foxtable编程在线全文阅读。
相关推荐: