Foxtable(狐表)用户栏目专家坐堂 → 动态加载代码优化请教


  共有3844人关注过本帖树形打印复制链接

主题:动态加载代码优化请教

帅哥哟,离线,有人找我吗?
zhy400137
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1133 积分:8227 威望:0 精华:0 注册:2013/11/3 19:00:00
动态加载代码优化请教  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1133 积分:8227 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2020/3/2 9:41:00 [只看该作者]

老师,我做了个动态加载表的函数,因为想用狐表的关联表功能,所以在一张表里建了一个字段叫关联表,
加载表时,会去检查关联表里是否有关联内容:比如:A表|B表|C表,如果有就把这三张表都同时加载进来,
这个代码我是放在导航窗口的click事件里的(Functions.Execute("动态加载表","窗口名"),但有个问题就是,
打开窗体加载表后,当前窗体绑定的表是和窗体一起展示,没有问题(比如表A)。但其他两个表(表B和表C)也
会同时显示出来,只能又通过代码去隐藏,这样打开窗体会有点慢。是否有可以优化的方法?谢谢。
[此贴子已经被作者于2020/3/2 9:49:45编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1133 积分:8227 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2020/3/2 10:17:00 [只看该作者]

但加载进来,如果其窗体没有打开,会显示一个没有窗体的表出来,有点难看,
有没有加载进来不显示的方法?谢谢

因为我这个是在打开窗口前就加载的,所以一直在用,也没啥问题,就是有点慢
[此贴子已经被作者于2020/3/2 10:20:49编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/2 10:26:00 [只看该作者]

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

 回到顶部