以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  关于动态加载 请教  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=149247)

--  作者:yifan3429
--  发布时间:2020/4/27 12:04:00
--  关于动态加载 请教
新建一张 权限表 有窗口 主表  关联表 三列  
我通过目录树  选择对应的窗口 打开主表 然后同时也加载关联表
系统默认是不加载任何表和数据 点击目录树时从后台获取加载条件
数据源是 sql  2019 


图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20200427120416.png
图片点击可在新窗口打开查看



原来的做法是将窗口和主表同名,现在想修改下。
 
If e.Node.Level = 1 Then
    If Forms(e.Node.Text).TableName <> "" Then \'不是模式,独立窗口        
        If DataTables.Contains(Forms(e.Node.Text).TableName) = False Then \'如果表C没有加载
            DataTables.Load(Forms(e.Node.Text).TableName) \'加载表C
        End If        
        Forms(e.Node.Text).show
        MainTable = Tables(Forms(e.Node.Text).TableName)
    Else
        Forms(e.Node.Text).show
    End If
Else
    msgbox( e.node.text & "  正在测试 中尚未开放")
End If
[此贴子已经被作者于2020/4/27 12:08:35编辑过]

--  作者:有点蓝
--  发布时间:2020/4/27 13:39:00
--  
关联表要一起加载:http://www.foxtable.com/webhelp/topics/2755.htm
通过表名使用find到权限表查询得到关联表,合并到一起加载

--  作者:yifan3429
--  发布时间:2020/4/27 18:36:00
--  
If e.Node.Level = 1 Then
    If Forms(e.Node.Text).TableName <> "" Then \'不是模式,独立窗口        
        If DataTables.Contains(Forms(e.Node.Text).TableName) = False Then \'如果表C没有加载
            DataTables.Load(Forms(e.Node.Text).TableName) \'加载表C
        End If        
        Forms(e.Node.Text).show
        MainTable = Tables(Forms(e.Node.Text).TableName)
    Else
        Forms(e.Node.Text).show
    End If
Else
    msgbox( e.node.text & "  正在测试 中尚未开放")
End If


在这个代码基础上 我想实现
当我点击节点时通过节点名在权限表里面的窗口列找到窗口名,同时打开主表列对应的主表和关联列对应的关联表  关联表的间隔符号是 | 
不会写。求助老师

--  作者:有点蓝
--  发布时间:2020/4/27 20:22:00
--  
If DataTables.Contains(Forms(e.Node.Text).TableName) = False Then \'如果表C没有加载
dim dr as datarow = DataTables("权限").find("窗口=\'" & e.node.text & "\'")
if dr isnot nothing then 
DataTables.Load(dr("对应表") & "|" & dr("关联表")) \'加载表C
end if
end if
[此贴子已经被作者于2020/4/27 20:22:59编辑过]

--  作者:yifan3429
--  发布时间:2020/4/28 0:39:00
--  
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.Co nnecti
cmd.Co mmandText = "SELE CT DISTINCT 子菜单,权限,用户 From {菜单目录}"
dt = cmd.ExecuteReader( )
DataTables("菜单目录").LoadFilter = ""
DataTables("菜单目录").Load
Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
tr.BuildTree("菜单目录", "子菜单|权限","[用户] Like \'%" & User.Name & "%\'", "_sortkey, _Identify")

上面的代码在 菜单目录 不被加载时应该是可以建立目录树的  不知哪里设计错误不能 建立目录树。

希望后台数据建立目录树 ,不需要加载数据或表,可行吗?还是必须加载表才能执行目录树

---------------------------
提示
---------------------------
不存在名称为"菜单目录"的DataTable!
---------------------------
确定   
---------------------------


[此贴子已经被作者于2020/4/28 0:41:36编辑过]

--  作者:yifan3429
--  发布时间:2020/4/28 1:11:00
--  
这个先后顺序有问题哦,流程是先打开打开窗口,然后打开对应表  最后打开关联表,还需要麻烦老师

If e.Node.Level = 1 Then
    If Forms(e.Node.Text).TableName <> "" Then \'不是模式,独立窗口
        If DataTables.Contains(Forms(e.Node.Text).TableName) = False Then \'如果表C没有加载
            Dim dr As DataRow = DataTables("菜单目录").find("权限=\'" & e.node.text & "\'")
            If dr IsNot Nothing Then
                DataTables.Load(dr("对应表") & "|" & dr("关联表")) \'加载表C
            End If

下面需要直接打开窗口 通知切换到对用的表

            Forms(e.Node.Text).show    定位到 权限=\'" & e.node.text   
            MainTable = Tables(Forms(e.Node.Text).TableName)   定位到 对应表
        Else
            Forms(e.Node.Text).show
        End If
    End If
Else
    msgbox( e.node.text & "  正在测试 中尚未开放")
    
End If

[此贴子已经被作者于2020/4/28 2:49:40编辑过]

--  作者:有点蓝
--  发布时间:2020/4/28 8:38:00
--  
回5楼

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.Co nnecti
cmd.Co mmandText = "SELECT DISTINCT 子菜单,权限 From {菜单目录} where [用户] Like \'%" & User.Name & "%\'"
dt = cmd.ExecuteReader( )
Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
tr.BuildTree(dt, "子菜单|权限")

--  作者:有点蓝
--  发布时间:2020/4/28 8:44:00
--  
回6楼,只要不是模式窗口,无所谓前后顺序。不过窗口用到的表肯定要在窗口打开前先加载
--  作者:yifan3429
--  发布时间:2020/4/28 11:40:00
--  
If e.Col.Name = "加载" Then
    Dim dr As DataRow
    \'If DataTables.Contains("主表") = False Then
    If DataTables.Contains(dr("主表")) = False Then \'如果表C没有加载        
        DataTables.Load(dr("主表") & "|" & dr("关联表"))
    End If
End If


上面的代码想实现单机加载列  在同行获取主表和 关联表加载进来

--  作者:有点蓝
--  发布时间:2020/4/28 13:38:00
--  
dr改为e.row