Foxtable(狐表)用户栏目专家坐堂 → [求助]加载树及加载内容控制


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

主题:[求助]加载树及加载内容控制

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


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
[求助]加载树及加载内容控制  发帖心情 Post By:2022/1/13 22:32:00 [显示全部帖子]

有两张表,分别是“加载树设置”和“加载内容表
Select Case e.node.Name
    Case e.node.Name
        Dim dr As DataRow
        dr = DataTables("加载树设置").Find("表名 = '" & e.node.Name & "'")
        Dim kd As String = dr("宽度")
        Dim hs As String = dr("行数")
        Dim nms() As String
        If dr.Isnull("列名")=False Then
            nms = dr("列名").Split(",")
        End If
        Dim dr1 As DataRow
        Dim dr2 As DataRow
        Dim Filter As String
        Dim nms1() As String = _UserRoles.Split(",")
        For Each nm As String In nms1
            dr1 = DataTables("加载内容表").Find("表名 = '" & e.node.Name & "' and 角色 like '%" & nm & "%' and 列名 is not null and 列内容 is not null and 制单人=false")
            dr2 = DataTables("加载内容表").Find("表名 = '" & e.node.Name & "' and 角色 like '%" & nm & "%' and 制单人 = true")
            If dr1 IsNot Nothing And Tables.Contains(e.node.Name) Then
                Filter = dr1("列名") & " In ( '" & dr1("列内容").replace(",","','") & "')"
                If DataTables.Contains(e.node.Name) = False Then
                    DataTables(e.node.Name).LoadFilter = Filter
                    DataTables(e.node.Name).Load
                End If
                If dr IsNot Nothing And Tables.Contains(e.node.Name) Then
                    For i As Integer = 0 To nms.Length - 1
                        If i=0 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "",kd,hs,True,Filter)
                        ElseIf i=1 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "",kd,hs,True,Filter)
                        Else
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "|" & nms(2) & "",kd,hs,True,Filter)
                        End If
                    Next
                End If
            ElseIf dr2 IsNot Nothing And Tables.Contains(e.node.Name) Then
                Filter = dr2("制单人列") & " = '" & _UserName & "'"
                If DataTables.Contains(e.node.Name) = False Then
                    DataTables(e.node.Name).LoadFilter = Filter
                    DataTables(e.node.Name).Load
                End If
                If dr IsNot Nothing And Tables.Contains(e.node.Name) Then
                    For i As Integer = 0 To nms.Length - 1
                        If i=0 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "",kd,hs,True,Filter)
                        ElseIf i=1 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "",kd,hs,True,Filter)
                        Else
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "|" & nms(2) & "",kd,hs,True,Filter)
                        End If
                    Next
                End If
            Else
                Filter = ""
                If DataTables.Contains(e.node.Name) = False Then
                    DataTables(e.node.Name).LoadFilter = Filter
                    DataTables(e.node.Name).Load
                End If
                If dr IsNot Nothing And Tables.Contains(e.node.Name) Then
                    For i As Integer = 0 To nms.Length - 1
                        If i=0 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "",kd,hs,True,Filter)
                        ElseIf i=1 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "",kd,hs,True,Filter)
                        Else
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "|" & nms(2) & "",kd,hs,True,Filter)
                        End If
                    Next
                End If
            End If
        Next
End Select

当某张表在“加载树设置”表中不存在时,就会提示以下错误,要如何调整

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


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


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/1/14 9:22:00 [显示全部帖子]

晕,眼花了。不过调整后还是一样的问题
Select Case e.node.Name
    Case e.node.Name
        Dim dr As DataRow
        dr = DataTables("加载树设置").Find("表名 = '" & e.node.Name & "'")
        Dim kd As String = dr("宽度")
        Dim hs As String = dr("行数")
        Dim nms() As String
        If dr.Isnull("列名")=False Then
            nms = dr("列名").Split(",")
        End If
        Dim dr1 As DataRow
        Dim dr2 As DataRow
        Dim Filter As String
        Dim nms1() As String = _UserRoles.Split(",")
        For Each nm As String In nms1
            dr1 = DataTables("加载内容表").Find("表名 = '" & e.node.Name & "' and 角色 like '%" & nm & "%' and 列名 is not null and 列内容 is not null and 制单人=false")
            dr2 = DataTables("加载内容表").Find("表名 = '" & e.node.Name & "' and 角色 like '%" & nm & "%' and 制单人 = true")
            If dr1 IsNot Nothing And DataTables.Contains(e.node.Name)= True  Then
                Filter = dr1("列名") & " In ( '" & dr1("列内容").replace(",","','") & "')"
                DataTables(e.node.Name).LoadFilter = Filter
                DataTables(e.node.Name).Load
                If dr IsNot Nothing And DataTables.Contains(e.node.Name)= True  Then
                    For i As Integer = 0 To nms.Length - 1
                        If i=0 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "",kd,hs,True,Filter)
                        ElseIf i=1 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "",kd,hs,True,Filter)
                        Else
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "|" & nms(2) & "",kd,hs,True,Filter)
                        End If
                    Next
                End If
            ElseIf dr2 IsNot Nothing And DataTables.Contains(e.node.Name)= True  Then
                Filter = dr2("制单人列") & " = '" & _UserName & "'"
                DataTables(e.node.Name).LoadFilter = Filter
                DataTables(e.node.Name).Load
                If dr IsNot Nothing And DataTables.Contains(e.node.Name)= True  Then
                    For i As Integer = 0 To nms.Length - 1
                        If i=0 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "",kd,hs,True,Filter)
                        ElseIf i=1 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "",kd,hs,True,Filter)
                        Else
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "|" & nms(2) & "",kd,hs,True,Filter)
                        End If
                    Next
                End If
            Else
                Filter = ""
                If DataTables.Contains(e.node.Name) = True   Then
                    DataTables(e.node.Name).LoadFilter = Filter
                    DataTables(e.node.Name).Load
                End If
                If dr IsNot Nothing And DataTables.Contains(e.node.Name)= True  Then
                    For i As Integer = 0 To nms.Length - 1
                        If i=0 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "",kd,hs,True,Filter)
                        ElseIf i=1 Then
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "",kd,hs,True,Filter)
                        Else
                            Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "|" & nms(2) & "",kd,hs,True,Filter)
                        End If
                    Next
                End If
            End If
        Next
End Select

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


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/1/16 14:49:00 [显示全部帖子]

Select Case e.node.Name
    Case e.node.Name
        Dim dr As DataRow
        Dim dr1 As DataRow
        Dim dr2 As DataRow
        Dim dr3 As DataRow
        Dim dr4 As DataRow
        Dim Filter As String
        Dim nms1() As String = _UserRoles.Split(",")
    If Forms.Contains(e.Node.Name)= False  Then
        dr = DataTables("表加载树设置").Find("表名 = '" & e.node.Name & "'")
        Dim nms() As String
        Dim kd As String
        Dim hs As String 
        If dr IsNot Nothing Then 
            kd = dr("宽度")
            hs = dr("行数")
            If dr.Isnull("列名")=False Then
                nms = dr("列名").Split(",")
            End If
        End If
        For Each nm As String In nms1
            dr1 = DataTables("加载内容权限表").Find("表名 = '" & e.node.Name & "' and 角色 like '%" & nm & "%' and 列名 is not null and 列内容 is not null and 制单人=false")
            dr2 = DataTables("加载内容权限表").Find("表名 = '" & e.node.Name & "' and 角色 like '%" & nm & "%' and 制单人 = true")
            If dr1 IsNot Nothing Then
                Filter = dr1("列名") & " In ( '" & dr1("列内容").replace(",","','") & "')"
            ElseIf dr2 IsNot Nothing Then
                Filter = dr2("制单人列") & " = '" & _UserName & "'"
            Else
                Filter = ""
            End If
        Next
        If DataTables.Contains(e.node.Name) = False Then '初始未加载表
            DataTables.Load(e.node.Name) '先加载表
            DataTables(e.node.Name).LoadFilter = Filter '加载条件
            DataTables(e.node.Name).Load() '加载数据
        Else '如果已经加载表但未加载数据
            DataTables(e.node.Name).LoadFilter = Filter
            DataTables(e.node.Name).Load()
        End If
        If dr IsNot Nothing Then
            For i As Integer = 0 To nms.Length - 1
                If i=0 Then
                    Tables(e.node.Name).OpenLoadTree("" & nms(0) & "",kd,hs,True,Filter)
                ElseIf i=1 Then
                    Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "",kd,hs,True,Filter)
                Else
                    Tables(e.node.Name).OpenLoadTree("" & nms(0) & "|" & nms(1) & "|" & nms(2) & "",kd,hs,True,Filter)
                End If
            Next
        End If
        For Each nm As String In nms1
            dr4 = DataTables("表列操作权限表").Find("表名 = '" & e.node.Name & "' and 角色 like '%" & nm & "%' And 不可见=true And 列名 is not null")
            dr3 = DataTables("表列操作权限表").Find("表名 = '" & e.node.Name & "' and 角色 like '%" & nm & "%' And 不可见=true And 列名 is null")
            For Each dr5 As DataRow In DataTables("表列操作权限表").Select("角色 like '%" & nm & "%'")
                If dr5.IsNull("列名") Then
                    Tables(dr5("表名")).Visible = Not dr5("不可见")
                    Tables(dr5("表名")).AllowEdit = Not dr5("不可编辑")
                Else
                    Tables(dr5("表名")).Cols(dr5("列名")).Visible = Not dr5("不可见")
                    Tables(dr5("表名")).Cols(dr5("列名")).AllowEdit = Not dr5("不可编辑")
                End If
            Next
            If dr4 IsNot Nothing Then
                RibbonTabs("hlcz").Groups("lcz").Items("UnHideColumn").Enabled=False
                ContextMenus("Column").Items("UnHide").Visible=False
            Else
                RibbonTabs("hlcz").Groups("lcz").Items("UnHideColumn").Enabled=True
                ContextMenus("Column").Items("UnHide").Visible=True
            End If
            If dr3 IsNot Nothing Then
                e.cancel = True
            End If
        Next
        If Tables.Contains(e.Node.Name)= True  Then
            If dr3 IsNot Nothing Then
                e.cancel = True
            Else
                MainTable = Tables(e.node.Name)
            End If
        End If
    ElseIf Forms.Contains(e.Node.Name)= True  Then
        For Each nm As String In nms1
            dr3 = DataTables("表列操作权限表").Find("表名 = '" & e.node.Name & "' and 角色 like '%" & nm & "%' And 不可见=true And 列名 is null")
            If dr3 IsNot Nothing Then
                e.cancel = True
            Else
                MainTable = Tables("查询表")
                Forms(e.node.name).open()
            End If
        Next
    End If
End Select

上述代码在客户端运行正常,但开发者在开发项目中点击目录树节点想调取报表出来的时候总提示错误,如何解决,采用自定义用户登录

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20220116144722.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/2/10 21:23:00 [显示全部帖子]

Select Case e.node.Name
    Case e.node.Name
        Dim Filter As String
            For Each dr8 As DataRow In DataTables("加载内容权限表").DataRows
                If dr8("表名") = e.node.Name And dr8("制单人")=False And dr8.Isnull("列名")=False And User.IsRole(dr8("角色")) Then
                    Filter = dr8("列名") & " In ( '" & dr8("列内容").replace(",","','") & "')"
                ElseIf dr8("表名") = e.node.Name And dr8("制单人")=True And User.IsRole(dr8("角色")) Then
                    Filter = dr8("制单人列") & " = '" & User.Name & "'"
                Else
                    Filter = ""
                End If
            Next
                    DataTables(e.node.Name).LoadFilter = Filter
                    DataTables(e.node.Name).Load()

当用户同时有多个角色,如用户同时具有“加载内容权限表”(下图)中的两个角色时,结果只加载了其中一个角色的内容,如何把不同角色的内容都加载进来呢

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


[此贴子已经被作者于2022/2/10 21:24:00编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/2/10 22:38:00 [显示全部帖子]

还是解决不了,偿试各种调整都不行,明天再看看

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


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/2/11 9:29:00 [显示全部帖子]

          Dim Filter As String
        Dim strs As String() = User.Roles.split(",")
        Dim rs As String
        For Each s As String In strs
             rs=rs & ",'" & s & "'"
        Next         
 Dim drs1 As List(of DataRow)  = DataTables("加载内容权限表").Select("表名 = '" & e.node.Name & "' and 角色 in (" & rs.trim(",") & ") and 列名 is not null and 列内容 is not null and 制单人=false")
            Dim drs2 As List(of DataRow)  = DataTables("加载内容权限表").Select("表名 = '" & e.node.Name & "' and 角色 in (" & rs.trim(",") & ") and 制单人 = true")
            For Each dr11 As DataRow In drs1
                    If Filter >"" Then
                        Filter = Filter & " or "
                    End If
                    Filter = Filter & "" & dr11("列名") & " In ( '" & dr11("列内容").replace(",","','") & "')"                 
            Next
msgbox(Filter)

下面的条件显示并没有问题,但加载的内容却只是条件后面一部分

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



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


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/2/11 10:49:00 [显示全部帖子]

数据没有问题,我把用户角色改成只有一个角色,各自角色的数据都能加载进来,如果同时两个角色,就只加载了条件后面部分数据进来,条件合成没有问题,那是不是加载这里的问题
                    DataTables(e.node.Name).LoadFilter = Filter
                    DataTables(e.node.Name).Load()

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


加好友 发短信
等级:六尾狐 帖子:1394 积分:10728 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2022/2/11 13:23:00 [显示全部帖子]

哦,好象找到原因了
[此贴子已经被作者于2022/2/11 13:24:48编辑过]

 回到顶部