DropTreeBuilder

用于给列生成下拉目录树,下拉目录树能够非常高效地输入数据:

DropTreeBuilder成员介绍:

属性

TreeFile:        字符型,指定目录树文件
TreeString:       字符型,指定用于生成目录树的字符串 
SourceTable:     DataTable类型,指定目录树表
TreeFilter:       字符型,用于设置从SourceTable取数据生成目录树的过滤条件。 
TreeSort:         字符型,用于设置生成目录树的排序列。
ReceiveCols:     字符型,指定数据接收列
TreeCols:        字符型,指定目录树列
SourceCols:      字符型,指定数据来源列
PathSeparator:   字符型,路径分割符号
ContentSeparator:字符型,指定内容分割符号
SeparateContent: 逻辑型,是否分割内容
TreeWidth:        整数型,指定目录树宽度
TreeHeight:      整数型,指定目录树高度

方法

Build: 生成下拉目录树。

创建目录树文件

在使用下拉目录树之前,通常需要先创建一个目录树文件。

在菜单的“杂项”功能区,单击下面的按钮:

可以打开目录树编辑窗口,可以在这里创建目录树文件,也可以打开一个现有的目录树文件修改:

 

示例一

创建了目录树文件后,就可以使用目录树录入数据了。
假定有一个表,希望使用下图所示的目录树输入数据:

可以在项目事件AfterOpenProject事件中加入下面的代码:

Dim tb As New DropTreeBuilder
tb.TreeFile =
"product.foxtr" '指定目录树文件
tb.ReceiveCols =
"大类|二类|三类" '指定数据接收列
Tables(
"订单").Cols("大类").DropTree = tb.Build()

提示:目录树文件最好放在项目的Attachments文件夹中,否则必须指定明确的路径。

示例二

在网络环境下使用文件型目录树不太方便,更方便的是将目录树存储在数据表中,用于存储目录树的列最好是备注型
虽然目录树文件的后缀名为foxtr,但其实是一个纯文本文件,可以用记事本打开,将其内容复制粘贴到数据表中的用于存储目录树的备注列中。

Dim s As String
'请在这里设置代码从数据表中获得目录树字符串,并赋值给变量s

Dim
tb As New DropTreeBuilder
tb.TreeString = s
'设置目录树字符串
tb.ReceiveCols =
"大类|二类|三类" '指定数据接收列
Tables
("订单").Cols("大类"
).DropTree = tb.Build()

提示:在窗口设计的章节,我们还会介绍如何自己编写一个目录树编辑器,这样可以将目录树编辑和自己的系统更为紧密地结合起来。

示例三

有的时候,目录树一个节点的内容,可能包括多项内容。
例如对于下面的目录树,二级节点就包括县市、区号、邮编三项内容,三项内容用符号“|”隔开了:

在使用目录数列表的时候,为了将二级节点的三项内容对应地填入县市、区号、邮编三列中,可以如下设置代码:

Dim tb As New DropTreeBuilder
tb.TreeFile =
"Region.foxtr" '指定目录树文件
tb.ReceiveCols =
"省|县市|区号|邮编" '指定数据接收列
tb.SeparateContent =
True '启用内容分割功能
tb.ContentSeparator =
"|" '指定内容分割符号
Tables(
"客户").Cols("省").DropTree = tb.Build()

这样当我们选择某个节点的时候,二级节点的内容能够对应地输入到县市、区号、邮编三列中:

示例四

除了根据文件,还可以根据数据表生成目录树。

例如有一个行政区域表,结构如下:

我们希望在输入数据的时候,能够根据该数据表自动生成目录树,用于输入省和县市列的内容,可以如下设置代码:

Dim tb As New DropTreeBuilder
tb.SourceTable =
DataTables("行政区域") '指定目录树表
tb.TreeCols =
"省|县市" '指定用于生成目录树的列
tb
.ReceiveCols = "省|县市" '指定数据接收列
Tables(
"客户").Cols("省").DropTree = tb.Build
()

即可得到下图所示的下拉目录树:

示例五

上面的下拉目录树只能输入省、县市两列的内容,而区号和邮编由于没有参与目录树的生成,所以无法输入到数据表中。
不过我们可以通过明确指定数据来源列,来输入区号和邮编两列的数据:

Dim tb As New DropTreeBuilder
tb.SourceTable = DataTables(
"行政区域") '指定目录树表
tb.TreeCols =
"省|县市" '指定用于生成目录树的列
tb.SourceCols =
"省|县市|区号|邮编" '指定数据来源列
tb.ReceiveCols =
"省|县市|区号|邮编" '指定数据接收列
Tables
("客户").Cols("省"
).DropTree = tb.Build()

通过上面的设置后,可以正常输入区号和邮编,尽管这两列并没有用于生成目录树:

示例六

有的时候,用于生成目录树的表,其中一列的内容包括多个栏目的内容。
例如下面的县市列,就包括县市、区号、邮编三个栏目的内容:

为了在目标表中,能够将上图中县市列的内容拆分成3个部分,对应地输入到县市、区号、邮编三列中,可以如下设置代码:

Dim tb As New DropTreeBuilder
tb.SourceTable = DataTables(
"行政区域2") '指定目录树表
tb.TreeCols =
"省|县市" '指定用于生成目录树的列
tb.ReceiveCols =
"省|县市|区号|邮编" '指定数据接收列
tb.SeparateContent =
True '启用内容分割功能
tb.ContentSeparator =
"|" '指定内容分割符号
Tables
("客户").Cols("省").DropTree = tb.Build()

示例七

有的时候,目录树表的所有分类内容都在同一列中,如下图:

如果需要根据这一列的内容,来生成一个多层的目录树,指定目录树列的时候,应该将列名用大括号括起来:

Dim tb As New DropTreeBuilder
tb
.SourceTable = DataTables("分类") '指定目录树表
tb
.TreeCols = "{分类}" '指定用于生成目录树的列,用大括号括起来
tb
.ReceiveCols = "大类|二类|三类" '指定数据接收列
tb
.PathSeparator = "|" '指定路径分割符号
Tables(
"订单").Cols("大类").DropTree = tb.Build
()


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