以文本方式查看主题

-  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
--  
只能加载后再隐藏。加载后不会自动切换到新加载的表的,可以显示一个空表,放一个主窗口,然后把标题行隐藏