以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 动态加载代码优化请教 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=146763) |
-- 作者:zhy400137 -- 发布时间:2020/3/2 9:36:00 -- 动态加载代码优化请教 Dim ModuleName As String = Args(0) \'单据名称 Dim correlationTable As String \'关联表 \'------获取窗体发布的Datatable----- Dim ModuleListCmd As New SQLCommand Dim ModuleListTable As DataTable ModuleListCmd.ConnectionName = DataSource ModuleListCmd.CommandText="Select * F rom {窗体发布}" ModuleListTable = ModuleListCmd.ExecuteReader() \'----------------------------------------------------- Dim dr As DataRow dr = ModuleListTable.Find("单据 = \'" & ModuleName & "\'") If dr IsNot Nothing Then If dr.Isnull("关联表") Then correlationTable = dr("主表") Else correlationTable = dr("关联表") End If LockBaseMainForm() \'锁定主界面 \'如果要动态加载的表包含关联表 If correlationTable.Contains("|") Then For Each TableName As String In correlationTable.Split("|") If DataTables.Contains(TableName) = False Then DataTables.Load(TableName) End If Dim r As DataRow r = ModuleListTable.Find("主表 = \'" & TableName & "\'") If r IsNot Nothing Then If r("单据")<>ModuleName Then If forms.Contains(r("单据")) = True AndAlso Forms(r("单据")).Opened = False Then Tables(TableName).Visible = False ElseIf forms.Contains(r("单据")) = False And Tables(TableName).DataTable.Type = 3 Then Tables(TableName).Visible = False End If End If End If Next Else \'如果要动态加载的表不包含关联表 If DataTables.Contains(correlationTable) = False Then DataTables.Load(correlationTable) End If End If UnLockBaseMainForm() \'解锁主界面 End If
|
-- 作者:zhy400137 -- 发布时间:2020/3/2 9:41:00 -- 老师,我做了个动态加载表的函数,因为想用狐表的关联表功能,所以在一张表里建了一个字段叫关联表, 加载表时,会去检查关联表里是否有关联内容:比如:A表|B表|C表,如果有就把这三张表都同时加载进来, 这个代码我是放在导航窗口的click事件里的(Functions.Execute("动态加载表","窗口名"),但有个问题就是, 打开窗体加载表后,当前窗体绑定的表是和窗体一起展示,没有问题(比如表A)。但其他两个表(表B和表C)也 会同时显示出来,只能又通过代码去隐藏,这样打开窗体会有点慢。是否有可以优化的方法?谢谢。
[此贴子已经被作者于2020/3/2 9:49:45编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/3/2 10:10:00 -- 这种没有办法的。关联表必须一起加载。 上面的加载方法也不正确,比如表A和表B关联、A和表C关联,那么加载应该是: DataTables.Load("表A|表B|表C") 必须在一个load里面加载,而不是分为3次Load,下面这种用法是有问题的: DataTables.Load("表A") DataTables.Load("表B") DataTables.Load("表C")
|
-- 作者:zhy400137 -- 发布时间:2020/3/2 10:17:00 -- 但加载进来,如果其窗体没有打开,会显示一个没有窗体的表出来,有点难看, 有没有加载进来不显示的方法?谢谢 因为我这个是在打开窗口前就加载的,所以一直在用,也没啥问题,就是有点慢
[此贴子已经被作者于2020/3/2 10:20:49编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/3/2 10:26:00 -- 只能加载后再隐藏。加载后不会自动切换到新加载的表的,可以显示一个空表,放一个主窗口,然后把标题行隐藏 |