Foxtable(狐表)用户栏目专家坐堂 → 8月18日更新,foxtable换核心后的首次更新


  共有24875人关注过本帖树形打印复制链接

主题:8月18日更新,foxtable换核心后的首次更新

帅哥哟,离线,有人找我吗?
狐狸爸爸
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
8月18日更新,foxtable换核心后的首次更新  发帖心情 Post By:2009/8/18 11:47:00 [显示全部帖子]

旧版本程序创建本的文件,新旧版本的程序都可以打开。
新版本创建的文件,旧版本打开会出错。
任何一次大更新都会带来比较多的虫子,欢迎大家捉虫。



菜单大变样,菜单中的新增功能参考此处:


图片点击可在新窗口打开查看此主题相关图片如下: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/8/18 12:03:00 [显示全部帖子]

以下是引用reachtone在2009-8-18 11:56:00的发言:
回收站有问题:
在数据没保存的情况下,删除的行无法回收。即使回收,回收来的行也是空的,原来的内容没有了。


没有问题的,回收也好,还原也好,都不包括新增行,只是对原有的行有效,让行回到自打开文件或者上次保存以来的状态。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/8/18 19:08:00 [显示全部帖子]

to gdlgh:

我刚刚下载测试了一下,没有问题的。
可能你的电脑不止一个Foxtable,你解压到一个新的目录运行看看。

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/8/20 8:10:00 [显示全部帖子]

To cpayinyuan:

你最关心的部分,在更新说明已经说得很清楚了,那么长的一段,还不够吗?
最重要的就是性能,有本质的变化,其次是Table成了一个真正的控件,然后是基本功能的增加和细节的改进。
[此贴子已经被作者于2009-8-20 8:11:44编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/8/20 9:32:00 [显示全部帖子]

以下是引用gdlgh在2009-8-20 9:26:00的发言:

真怪!在其它机下可得8.20版,而在偶的机怎样下都是7.29版!图片点击可在新窗口打开查看


哈哈,贞子跑到你电脑里头了。


 回到顶部