窗口中的Table控件

窗口中的Table控件有以下动态加载数据的方法。

使用DataTable的Load方法

如果是从同一个表中动态加载数据,可以使用DataTable的Load方法。

例如希望在某SQLTable显示今天的订单,可以在设计窗口的时候,将其SQL语句设置为:

Select * From {订单} Where [_Identify] Is Null

然后在窗口的AfterLoad事件加上代码:

Tables("窗口1_Table1").DataTable.LoadFilter = "[日期] = #" & Date.Today & "#"
Tables(
"窗口1_Table1").DataTable.Load

使用Table的Fill方法

如果是不同的表中动态加载数据,可以使用Table的Fill方法。
对于窗口中的SQLQuery、SQLTable型Table,以及非副本的Normal型Table,都可以使用Fill方法动态加载数据。
Table的Fill方法和DataTable的语法类似:

语法

Fill(SelectString, IsQuery)

或者

Fill(SelectString, ConnectionName, IsQuery)

SelectString:  Select语句
ConnectionName:可选参数,指定数据源名称
IsQuery:       逻辑型,设为True,将生成SQLQuery型Table,否则生成SQLTable型Table。

SQLTable是
数据表,默认是可以编辑和保存的。
SQLQuery是查询表,默认不能编辑,通过将其AllowEdit属性设置为True,可以编辑查询结果,但不能保存编辑结果。

示例

Tables("窗口1_Table1").Fill("Select * From {客户}","nwnd",True)

不管Table原来是什么类型,显示的是什么数据,执行上述代码后,Table将成为SQLQuery类型,显示nwnd数据源中的客户表数据。

需要特别注意的是,如果只想取部分列生成SQLTable,那么必须包括主键列在内,例如:

Tables("窗口1_Table1").Fill("Select [_Identify],[客户],[数量],[单价] From {订单}",False)

这里假定订单表是内部数据表,内部数据表的主键列是_Identify,如果是外部表,请使用实际的主键列名称。

如果要生成SQLQuery,则没有这个限制:

Tables("窗口1_Table1").Fill("Select [客户],[数量],[单价] From {订单}",True)

一定要注意,如果要生成SQLTable,第二个参数要设置为False,如果要生成SQLQuery,第二个参数则要设置为True,切不可搞混。

DataSource属性

Table有一个DataSource属性,可以通过此属性动态设置其绑定的表。

例如:

Tables("窗口1_Table1").DataSource = DataTables("订单")

执行上述代码后,不管原来的Table是何种类型(非副本的Normal类型Table除外),都将成为订单表的一个副本。

我们知道Foxtable是通过以下类型生成统计表或临时表的:

GroupTableBuilder
CrossTableBuilder
SQLGroupTableBuilder
SQLCrossTableBuilder
SQLJoinTableBuilder
DataTableBuilder

这些类型都有一个BuildDataSource方法,可以生成一个对象,此对象可以直接绑定到SQLTable和SQLQuery类型的Table,以及副本型的Table。
例如将某按钮的Click事件代码设为:

Dim b As New GroupTableBuilder("统计表1",DataTables("订单"))
b.Groups.AddDef("日期","月份")
b.Totals.AddDef("数量")
Tables
("窗口1_Table1").DataSource = b.BuildDataSource()

那么单击此按钮,窗口中的Table1将显示各月销售数量。

提示:上面的代码中生成的统计表的名称并非"统计表1",而是"窗口1_Table1",也就是说GroupTableBuilder指定的表名是无效的,切记切记。

只有SQLTable、SQLQuery和作为副本的Normal型Table,才可以使用Table类型的Fill方法和DataSource属性,对于非副本的Normal型Table,只能使用DataTable的Fill和Load方法。

判断Table的类型

如果需要判断Table的类型,以及是否是副本,请参考:

TableType
IsCopy


本页地址:http://www.foxtable.com/webhelp/topics/1930.htm