编写通用的下拉目录树
本节的内容可以参考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控件的下拉窗口属性设置为“通用目录树”。