自行设计下拉目录树

我们知道,在Foxtable只需经过简单的设置,即可在表中使用下拉目录树高效录入数据,无需编写任何代码。
我们也可以抛开内置的功能,自己设计一个下拉目录树来输入数据,不要以为这是多余的,因为:

1、内置的下拉目录树只能在表中使用,不能在窗口使用。
2、内置的下拉目录树有固定的套路,一些特殊需求可能无法满足,例如本例的下拉目录树,增加了刷新功能。

本示例请参考CaseStudy目录下的示例文件“下拉目录树.Table”。

此项目有两个表,分别为客户表和行政区域表,行政区域表为基础数据表,这个表已经输入了全国所有县级行政区域的资料,包括省市、市县、区号、邮编四列 。
我们希望在客户表设计一个下图所示的输入窗口,单击县市列这个文本框的下拉按钮,能出现一个下拉目录树,此目录树会列出所有的省市和县市,选择某个县市,会自动输入省市、县市、区号、邮编四列的内容:

同时希望在表中的县市列,也能通过下拉目录树来输入这四列的内容:

 

设计步骤

一、设计下拉窗口

1、新建一个窗口,名为“窗口1”,窗口类型设置为“DropDownForm”。

2、窗口中插入一个TreeView(目录树)控件。

3、窗口的AfterLoad事件设置为:

Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv
.BuildTree("行政区域","省市|县市")

4、将刷新目录树按钮的代码设置为:

Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv
.BuildTree("行政区域","省市|县市")

5、TreeView(目录树)的NodeMouseClick事件代码设置为:

If e.Node.Level = 1 Then '如果单击的是第二层节点
    Dim tr As Row = Tables("客户").Current
    Dim dr As DataRow = e.Node.DataRow '获取生成此节点的DataRow
    tr("省市") = dr("省市")
    tr("县市") = dr("县市")
    tr("区号") = dr("区号")
    tr("邮编") = dr("邮编")
    e.Form.DropDownBox.Value = tr("县市") '这行不是多余的,省略此行,无法在表中正常使用此下拉窗口输入数据.
|
    e.Form.DropDownBox.CloseDropdown()

End
If

二、设计录入窗口

1、新建一个窗口,名为“窗口2”,窗口类型为“独立”。

2、插入几个输入框,分别绑定到各字段,其中县市列输入框是DropDownBox,其余各列是TextBox。

2、选择县市输入框,将其下拉窗口设置为“窗口1”:

三、在项目事件AfterOpenProject加入代码:

Tables("客户").Cols("县市").DropForm = "窗口1" '客户表的县市列也采用我们设计的下拉窗口输入数据。


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