关于初始化设置

关于初始化设置的代码,我们有如下的建议:

1、设置列标题的代码,必须在项目事件Initialize编写。
2、开启全局表事件的代码,最好在项目事件Initialize编写。
3、设置DataTable的代码,在项目事件Initialize或者AfterOpenProject编写都可以,不过AfterOpenProject更合适一点,因为此时DataTable和Table都已经生成,可以统一设置。
4、设置用户权限的代码,在项目事件AfterOpenProject编写较为合适,如果运行过程中允许切换用户,那么最好在LoadUserSetting事件中编写。

示例一

例如下面设置列标题的代码,必须在项目事件Initialize事件中编写:

With DataTables("表B")
    .DataCols(
"Name").Caption = "姓名"
    .DataCols(
"ID").Caption = "编号"
    .DataCols(
"Date").Caption = "日期"
End
With

这是因为真正使用列标题是在生成Table的过程中,如果在AfterOpenProject设置列标题,此时Table已经生成,对于列标题的设置不会再有作用。
但是这并不意味着在运行过程中不能修改列标题,只不过修改后,要执行一次BuildHeader方法,而且也不如Initialize高效。
请参考:BuildHeader

示例二

例如你在全局表事件AfterSelChange中设置了代码,且希望这个事件针对所有表触发,那么应该在项目事件Initialize加入代码:

For Each dt As DataTable In DataTables
    dt.GlobalHandler.
AfterSelChange = True
Next

为什么要在Initialize事件设置,而不是在AfterOpenProject事件设置呢?这是因为后者在项目完全打开后才执行,而在此之前,已经有Table会触发AfterSelChange事件。

示例三

例如希望产品表内容只能在Tables("产品")修改,也就是只能在主表修改,而不能在关联表修改,可以在AfterOpenProject事件中加入如下代码:

DataTables("产品").AllowEdit = False
Tables
("产品").AllowEdit = True

这样的代码在AfterOpenProject设置较为恰当,因为此时DataTable和Table都已经生成,可以统一对二者进行设置。

示例四

和用户权限设置有关的代码,那么最好LoadUserSetting事件中编写,例如:

If User.Type = UserTypeEnum.Administrator Then
    DataTables
("表A").AllowEdit = True
Else
    DataTables
("表A").AllowEdit = False
End
If

这是因为LoadUserSetting不仅在打开项目后执行,而且每次切换用户也会执行一次,确保权限设置始终有效。


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