动态目录树列表

利用DropTreeBuilder,同样可以动态生成目录树列表。
本节的内容可以参考CaseStudy目录下的文件:动态目录树列表.Table

假定有一个“行政区域“表,结构如下:

我们希望在客户表输入数据的时候,能够根据该”行政区域“表自动生成目录树,用于输入省、县市、区号、邮编等列的内容 。

为此可以在项目的AfterOpenProject事件中加入代码:

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

这样打开项目后,选择客户表的省列,单击下拉按钮,即可出现下图所示的目录树,选择某个县市,可以一次输入省、县市、区号和邮编四列的内容:

上面的代码设置在AfterOpenProject事件中,这有一个问题,就是在“行政区域”表中修改数据后,上述代码生成的目录树不会自动更新,除非你重新打开项目文件。

为此可以将代码移至MainTableChanged事件中:

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

这样每次选择客户表,都会根据“行政区域”表的最新数据,重新生成目录树列表。

不管是动态列表项目还是动态目录树列表,合理选择代码位置是很重要的,如果项目来源表很少需要更新,例如上面的行政区域表,那么将代码放在项目事件AfterOpenProject最为合理,偶尔更新的时候,也只需重新打开项目文件即可;如果项目来源表经常需要在运行过程中更新,那么应该将代码放在项目事件MainTableChanged中;如果需要根据其它列已经输入的内容来生成列表项目或目录树,那么就只能将代码放在表事件PrepareEdit中了。


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