旧版本程序创建本的文件,新旧版本的程序都可以打开。
新版本创建的文件,旧版本打开会出错。
任何一次大更新都会带来比较多的虫子,欢迎大家捉虫。
菜单大变样,菜单中的新增功能参考此处:
此主题相关图片如下:123.gif
有很多的改进,包括性能和功能,文档来不及整理,只说一下大家最关心的:
窗口中的Table
窗口可以插入三种类型的Table,分别是:
Normal
SQLTable
SQLQuery
Normal类型的Table
如果类型为Normal,在默认情况下,只是将主界面中Table移到窗口中而已,这和以前的版本一样。
如果将“作为副本”属性设为True,将不影响原Table,而是创建一个原Table的副本插入到窗口中,副本Table和原Table可以各自进行独立的操作,
副本类型的Table是不能编辑的,其余和标准的Table没有差别。对于副本类型的Table,可以通过设置DataSource属性,例如窗口1中插入了一个名为Table1的Table,该Table绑定到客户表,且作为副本,打开窗口后,该Table将显示客户表数据。
假定希望单击某按钮,此Table能够转而显示订单表数据,只需将该按钮的Click事件设为:
Tables("窗口1_Table1").DataSource = DataTables("订单")
上面的代码很简单,不过有一个地方需要特别注意,就是副本Table的名称,副本Table的名称为等于:
窗口名称_控件名称
我们可以通过Tables集合来引用这个Table,此Table在打开窗口的时候自动生成,在关闭窗口后自动删除。
一个Table可以有任意多个相互独立的副本,而且共享相同的事件。
通过判断触发事件的Table的名称,可以让不同副本的Table,实现不同的任务,例如在订单表的DoubleClick事件中加入代码:
Select Case e.Table.Name
Case "订单" '原订单Table
e.Row.Locked = Not e.Row.Locked
Case "窗口1_Table1" '窗口1中的Table1,假定此Table绑定到了订单表
Forms("窗口2").Open()
End Select
这样在原订单表中双击行,则切换行的锁定状态,而在窗口1中的订单副本表双击行,将打开窗口2。
提示,在默认情况下双击行进入编辑状态,而不会触发DoubleClick事件,所以要使原订单表触发DoubleClick事件,必须将其锁定;而副本Table因为本来就不能编辑,所以不存在这个问题。
副本Table可以使用原Table的表视图,例如:
Tables("窗口1_Table1").OpenView("精简视图")
SQLTable型Table
如果Table的类型为SQLTable,那么可以用SQl语句从指定数据源中提取数据生成Table,SQLTable是可以编辑的,而且有自己的独立事件,这一点很重要。
例如按照下图所是设置Table的属性:
此主题相关图片如下:1102.gif
即可从外部数据源nwnd中提取产品数据,显示在Table中。
需要注意的是,Select语句只能取一个表的数据,否则出错。
可以不指定数据源,此时从内部数据源中取数据。
SQLTable不仅会生成一个Table,还会生成一个DataTable,名称都是:
窗口名称_控件名称
例如窗口1中插入了一个名为Table1的Table,类型为SQLTable,那么窗口打开后,可以分别通过:
Tables("窗口1_Table1")
DataTables("窗口1_Table1")
来引用其生成的Table和DataTable,这些对象在打开窗口时自动生成,在关闭窗口后将自动删除。
SQLQuery型Table
SQlQuery的Table和SQLTable型的一样,利用Select语句从后台提取数据生成Table,不同的是SQLQuery的Select语句可以从多个表中取数据,但是SQLQuery生成的Table是不能编辑的。
Fill方法
对于SQLTable和SQLQuery类型的Table,可以通过Fill方法动态设置数据,Fill方法的语法为:
Fill(SelectString, IsQuery)
或者
Fill(SelectString, ConnectionName, IsQuery)
SelectString: Select语句
ConnectionName: 可选参数,指定数据源名称
IsQuery: 逻辑型,设为True,将生成SQLQuery型Table,否则生成SQLTable型Table.
例如:
Tables("窗口1_Table1").Fill("Select * From {客户}","nwnd",True)
不管Table原来显示的是什么数据,执行上述代码后,Table将显示mwnd数据源中的客户表数据。
DataSource属性
前面提到对于副本型的Table,可以通过DataSource属性动态设置其邦定的表:
Tables("窗口1_Table1").DataSource = DataTables("订单")
上面的代码对于SQLTable和SQLQuery类型的Table是无效的,这两种类型的Table不能通过DataSource绑定到现有的表,但是可以帮定到动态生成的表。
我们知道Foxtable是通过以下类型生成统计表或临时表的:
GroupTableBuilder
CrossTableBuilder
SQLGroupTableBuilder
SQLCrossTableBuilder
DataTableBuilder
这些类型都新增加了一个BuildDataSource方法,可以生成一个对象,此对象可以直接邦定到SQLTable和SQLQuery类型的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指定的表名是无效的,切记切记。
将Table作为列表使用
如果在设计窗口的时候,将Table的“列表模式”属性设为True,或者运行的时候将Table的ListMode属性设为True,那么Table表现得将和一个列表框类似。
如果在设计窗口的时候,将Table的“显示复选框”属性设为True,或者运行的时候将Table的ShowCheckBox属性设为True,那么行号位置将显示复选框。
Table中,和上述特性相关的属性、方法、事件有:
ListMode
逻辑属性,默认为False,设为True,选定行的所有单元格将突出显示。
为了防止在查看或编辑数据时,出现上下行错位的情况,或者希望将Table作为列表使用时,可以将此属性设为True。
ShowCheckBox
逻辑型,默认为False,设为True,将在行号列显示复选框。
GetCheckedRows
获得一个Row类型的集合,该集合包括所有复选框已经选中的行。
示例
下面的代码删除所有复选框已经选中的行:
Dim rs As List(of Row) = CurrentTable.GetCheckedRows()
For Each r As Row in rs
r.Delete
Next
ClearCheckedRows
清除所有行的复选框的选中标记。
BeforeCheckRow
修改行复选框状态前执行。
e参数属性:
Table: 触发事件的Table
Row: 触发事件的Row
Cancel: 逻辑型,设为True,取消此次操作。
AfterCheckRow
修改行复选框状态后执行。
e参数属性:
Table: 触发事件的Table
Row: 触发事件的Row
此外Row还增加了一个Checked属性:
Checked
逻辑型,返回或设置行的复选框是否选中。
示例
执行下面的代码,表A中第1行的复选框将被选中:
Tables("表A").Rows(0).Checked = True
[此贴子已经被作者于2009-8-18 11:47:46编辑过]
以下是引用reachtone在2009-8-18 11:56:00的发言:
回收站有问题:
在数据没保存的情况下,删除的行无法回收。即使回收,回收来的行也是空的,原来的内容没有了。
没有问题的,回收也好,还原也好,都不包括新增行,只是对原有的行有效,让行回到自打开文件或者上次保存以来的状态。