综合示例
本示例请参考CaseStudy目录下的示例文件“自动输入.Table”。
假定项目中有一个名为“行政区域”的基础数据表,这个表已经输入了全国所有县级行政区域的资料,包括省市、市县、区号、邮编四列;现在我们在客户表中输入数据,假定客户表也有这么四列,显然最好的输入方式是,客户表省市列能够根据行政区域表的设置,列出所有的省市供选择,选择省市之后,市县列能列出该省市所有的市县供选择,而选择市县之后,区号和邮编能够自动输入。
一、先在项目事件AfterOpenProject中设置如下代码:
'从行政区域表提取省市列的内容, 作为客户表省市列的列表项目
我们不在表事件PrepareEdit中设置客户表“省市”列的列表项目,而是在项目事件AfterOpenProject中设置,是因为省市的列表项目是固定的,如果在PrepareEdit事件中设置,每选择一个单元格都会重新设置一次列表项目,显然是没有必要的。
二、在客户表的PrepareEdit事件中输入如下代码:
If e.IsFocusCell
Then
'如果是焦点所在单元格
If
e.Col.Name = "县市"
Then
'如果正在编辑的是县市列
'从行政区域表提取该省
市的县市作为列表项目
e.Col.Combolist = DataTables("行政区域").GetComboListString("县市",
"[省市] = '" & e.Row("省市")
& "'")
End
If
End
If
再次强调,动态列表项目是针对正在输入的焦点单元格,所以一定要用IsFocusCell判断触发事件的是否是焦点单元格,因为在表中进行剪切、粘贴的时候,会针对每一个可能会受影响的单元格触发PrepareEdit事件,如果你在县市列复制粘贴1000行数据,那么就会触发一千次PrepareEdit事件, 如果不加判断,就等于要执行一千次GetComboListString,这可能需要一个漫长的执行过程。
'如果刚刚输入的是省市或县市列