编写通用的下拉目录树

本节的内容可以参考CaseStudy目录下的文件:通用下拉目录树.Table
本节的任务和上节类似,设计一个完全相同的下拉目录树用于快速输入数据,但不同的是,本节的下拉目录树是通用的,可以被多个表同时使用,而上一节设计的下拉目录树只能被客户表调用。

如果只是通过下拉目录树向某一列输入内容,那么下拉窗口自然就是通用的,只需在NodeMouseClick事件中写上代码:

e.Form.DropDownBox.Value =e.Node.Text
e.Form.DropDownBox.CloseDropdown()

如果要通过下拉目录树输入多列内容,而且要通用,就没办法如此简单的编码了,因为我们必须知道是什么表或什么列打开了此下拉目录树,才能向相关列写入数据。

获取打开下拉窗口的表和列的方法:

1、通过下拉窗口有DropTable和DropCol属性,可以知道是什么表的什么列打开了此下拉窗口,如果不是从表中打开的下拉窗口,那么这两个属性返回Nothing。
2、如果DropTable返回Nothing,那么通过下拉窗口的DropDownBox属性,可以获取打开此下拉窗口的DropDownBox控件,再通过此控件的BindingDield属性,就可以获取绑定的表和列。

示例

打开CaseStudy目录下的文件“通用下拉目录树.Table”,可以看到这个文件设计了一个名为“通用目录树”的下拉窗口,这个下拉窗口分别被两个表和两个窗口调用。

设置步骤:

1、新建一个窗口,名为“通用目录树”,窗口类型设置为“DropDownForm”。

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

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

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

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

If e.Node.Level = 1 Then '如果单击的是第二层节点
    Dim tr As Row
    Dim dr As DataRow = e.Node.DataRow '获取生成此节点的DataRow
    If e.Form.DropTable IsNot Nothing Then '如果下拉窗口是从表中打开
        tr = e.Form.DropTable.Current '获取此表的当前行
    Else '如果下拉窗口是通过DropdownBox打开
        Dim nm As String = e.Form.DropDownBox.BindingField '获取绑定的字段
        nm = nm.Split(".")(0) '获取绑定的表名
        tr = Tables(nm).Current '获取此表的当前行
    End If
    tr("省市") = dr("省市")
    tr("县市") = dr("县市")
    tr("区号") = dr("区号")
    tr("邮编") = dr("邮编")
    e.Form.DropDownBox.Value = tr("县市") '这行不是多余的,省略此行,无法在表中正常使用此下拉窗口输入数据.
    e.Form.DropDownBox.CloseDropdown()

End
If

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

Tables("客户").Cols("县市").DropForm = "通用目录树"
Tables
("雇员").Cols("县市").DropForm = "通用目录树"

6、设计其它录入窗口,将相关DropdownBox控件的下拉窗口属性设置为“通用目录树”。

 

 


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