自行设计下拉目录树
我们知道,在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 ps() As String = e.Node.FullPath.Split("\")
Dim tr As Row = Tables("客户").Current
Dim dr As DataRow = DataTables("行政区域").Find("省市 = '" & ps(0) & "' And 县市 = '" & ps(1) & "'")
If dr IsNot Nothing Then '如果在行政区域表找到对应的行,则将此行的值写入客户表的当前行.
tr("省市") = dr("省市")
tr("县市") = dr("县市")
tr("区号") = dr("区号")
tr("邮编") = dr("邮编")
e.Form.DropDownBox.Value = tr("县市") '这行不是多余的,省略此行,无法在表中正常使用此下拉窗口输入数据.
End If
e.Form.DropDownBox.CloseDropdown() '关闭下拉目录树
End
If
二、设计录入窗口
1、新建一个窗口,名为“窗口2”,窗口类型为“独立”。
2、插入几个输入框,分别绑定到各字段,其中县市列输入框是DropDownBox,其余各列是TextBox。
2、选择县市输入框,将其下拉窗口设置为“窗口1”:
三、在项目事件AfterOpenProject加入代码:
Tables("客户").Cols("县市").DropForm = "窗口1"
'客户表的县市列也采用我们设计的下拉窗口输入数据。