不同类型的Table共用一个录入窗口
通过控件的BindingField属性,可以在运行过程中将控件动态绑定到Table的列。
假定表A和表B建立了关联,另外窗口1中插入了一个Table控件,此Table控件绑定到表B,“作为副本”属性设置为True。
这样系统中将存在三个表B:
主表: Tables("表B")
关联表: Tables("表A.表B")
窗口中: Tables("窗口1_Table1")
假定我们为表B设计了一个录入窗口,希望在上述三个Table中双击任何一行,即可打开这个录入窗口来编辑修改此行的数据。
设计步骤:
1、在全局代码中加上以下代码:
Public btName As String
2、将表B的DoubleClick事件代码设置为:
btName = e.Table.Name
'将Table名称保存在全局标量btName中
e.Cancel
= True
'禁止进入编辑状态
Forms("录入窗口名").Open()
3、按常规设计好这个录入窗口,各个字段如常绑定到表B的各列。
4、将窗口的AfterLoad事件代码设置为:
If
btName > ""
AndAlso btName
<> "表B"
Then
For Each
c As
Winform.Control
In e.Form.Controls
If c.Bindingfield
> "" AndAlso
c.Bindingfield.StartsWith("表B.")
Then
c.BindingField=
c.BindingField.Replace("表B.",
btName &
".")
End If
Next
End
If
5、如果窗口中有增加行的按钮,此按钮的代码应该为:
Tables(btName).AddNew()
6、同样删除行按钮的代码为:
Tables(btName).Current.Delete()
整个设计思路很简单:
1、双击基于表B的某个Table时,将此Table的名称保存在全局变量btName中,然后在窗口的Afteload事件中修改各控件的BindingField属性,绑定到这个Table。
2、窗口中增加行、删除行这些按钮的代码,通过Tables(btName)来获得要操作的表。