Foxtable(狐表)用户栏目专家坐堂 → 单选项及多选目录树保存问题


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

主题:单选项及多选目录树保存问题

美女呀,离线,留言给我吧!
采菊东篱下
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
单选项及多选目录树保存问题  发帖心情 Post By:2022/6/12 13:39:00 [只看该作者]


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

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

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

点选左边的
TreeView2二级目录树的姓名,再点选中间的单选控件,另勾选右边的TreeView1多选目录树,按保存按钮,希望软件用户列表姓名等于点选的TreeView2二级目录树姓名且此行未被锁定授权权限列保存为Tuse,同时勾选授权表姓名等于点选的TreeView2二级目录树姓名及对应列名等于勾选的TreeView1子目录树名称,我这样写不报错,但没显示勾选的勾。
选看红色这段代码吧,软件用户列表授权权限列没显示勾。
Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim nd2 As WinForm.TreeNode = trv2.SelectedNode
If nd2.Level = 2 Then
    Dim di As DataRow = DataTables("软件用户列表").SQLFind("[姓名] = '" & nd2.Name & "' And ([锁定] Is Null or [锁定] = false)")
    If di IsNot Nothing Then
        Dim rdo As WinForm.RadioButton
        rdo = e.Form.Controls("RadioButton1")
        If rdo.Checked = True Then
            di("授权权限") = True
        Else
            di("授权权限") = False
        End If
    End If
    di.Save()
    For Each nd1 As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
        If nd1.Name = "版块管理" OrElse nd1.Name = "权限分配" Then
            Continue For
            Dim das As List(Of DataRow) = DataTables("授权表").SQLSelect("[用户姓名] = '" & nd2.Name & "' And [版块管理] = '" & nd1.Name & "' And [权限分配] = '" & nd1.Name & "' And ([锁定] Is Null Or [锁定] = false)")
            For Each da As DataRow In das
                For Each c1 As DataCol In DataTables("授权表").DataCols
                    If c1.Name = "所属部门" OrElse c1.Name = "职位" OrElse c1.Name = "用户姓名" OrElse c1.Name = "版块管理" OrElse c1.Name = "表名" OrElse c1.Name = "权限分配" OrElse c1.Name = "锁定" Then
                        Continue For
                    ElseIf nd1.Name = c1.Name And nd1.Checked = True Then
                        da(c1) = True
                    ElseIf nd1.Name = c1.Name And nd1.Checked = False Then 
                        da(c1) = False
                    End If
                Next
            Next
            DataTables("授权表").SQLUpdate(das)
            DataTables("授权表").load
        End If
    Next
End If
[此贴子已经被作者于2022/6/12 21:04:12编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110744 积分:563646 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/12 21:03:00 [只看该作者]

调试

Dim nd2 As WinForm.TreeNode = trv2.SelectedNode
msgbox(nd2.Level)
msgbox(nd2.Name )
msgbox(nd2.text)
If nd2.Level = 2 Then
    Dim di As DataRow = DataTables("软件用户列表").SQLFind("[姓名] = '" & nd2.Name & "' And ([锁定] Is Null or [锁定] = false)")
msgbox(nd2 IsNot Nothing)
    If di IsNot Nothing Then
        Dim rdo As WinForm.RadioButton

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/6/12 21:11:00 [只看该作者]

弹出的提示分别是2、黄五、黄五、Ture

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/6/12 21:17:00 [只看该作者]

哦,加
DataTables("软件用户列表").load
重新加载软件用户列表看到效果了,不过,下面这段红色代码同样没看到授权表的勾选效果。
Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim nd2 As WinForm.TreeNode = trv2.SelectedNode
If nd2.Level = 2 Then
    Dim di As DataRow = DataTables("软件用户列表").SQLFind("[姓名] = '" & nd2.Name & "' And ([锁定] Is Null or [锁定] = false)")
    If di IsNot Nothing Then
        Dim rdo As WinForm.CheckBox
        rdo = e.Form.Controls("CheckBox1")
        If rdo.Checked = True Then
            di("授权权限") = True
        Else
            di("授权权限") = False
        End If
    End If
    di.Save()
    DataTables("软件用户列表").load
    For Each nd1 As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
        If nd1.Name = "版块管理" OrElse nd1.Name = "权限分配" Then
            Continue For
            Dim das As List(Of DataRow) = DataTables("授权表").SQLSelect("[用户姓名] = '" & nd2.Name & "' And [版块管理] = '" & nd1.Name & "' And [权限分配] = '" & nd1.Name & "' And ([锁定] Is Null Or [锁定] = false)")
            For Each da As DataRow In das
                If da IsNot Nothing Then
                    For Each c1 As DataCol In DataTables("授权表").DataCols
                        If c1.Name = "所属部门" OrElse c1.Name = "职位" OrElse c1.Name = "用户姓名" OrElse c1.Name = "版块管理" OrElse c1.Name = "表名" OrElse c1.Name = "权限分配" OrElse c1.Name = "锁定" Then
                            Continue For
                        ElseIf nd1.Name = c1.Name And nd1.Checked = True Then
                            da(c1) = True
                        ElseIf nd1.Name = c1.Name And nd1.Checked = False Then 
                            da(c1) = False
                        End If
                    Next
                End If
            Next
            DataTables("授权表").SQLUpdate(das)
            DataTables("授权表").load
        End If
    Next
End If
[此贴子已经被作者于2022/6/12 21:44:32编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110744 积分:563646 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/12 22:02:00 [只看该作者]

还学不会调试?

    For Each nd1 As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
msgbox(nd1.Name)
        If nd1.Name = "版块管理" OrElse nd1.Name = "权限分配" Then
msgbox(1)
            Continue For
msgbox(2)这一句永远不会执行,想想为什么:http://www.foxtable.com/webhelp/topics/0226.htm


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/6/12 23:18:00 [只看该作者]

nd1和nd2都没问题的,显示是我要作为条件的名字,现改为红字的代码授权表依然不显示TreeView2目录树打勾的数据:

Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim nd2 As WinForm.TreeNode = trv2.SelectedNode
If nd2.Level = 2 Then
    Dim di As DataRow = DataTables("软件用户列表").SQLFind("[姓名] = '" & nd2.Name & "' And ([锁定] Is Null or [锁定] = false)")
    If di IsNot Nothing Then
        Dim rdo As WinForm.CheckBox
        rdo = e.Form.Controls("CheckBox1")
        If rdo.Checked = True Then
            di("授权权限") = True
        Else
            di("授权权限") = False
        End If
    End If
    di.Save()
    DataTables("软件用户列表").load
    For Each nd1 As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
        Dim das As List(Of DataRow) = DataTables("授权表").SQLSelect("[用户姓名] = '" & nd2.Name & "' And [版块管理] = '" & nd1.Name & "' And [权限分配] = '" & nd1.Name & "' And ([锁定] Is Null Or [锁定] = false)")
        For Each da As DataRow In das
            If da IsNot Nothing Then
                For Each c1 As DataCol In DataTables("授权表").DataCols
                    If c1.Name = "所属部门" OrElse c1.Name = "职位" OrElse c1.Name = "用户姓名" OrElse c1.Name = "版块管理" OrElse c1.Name = "表名" OrElse c1.Name = "权限分配" OrElse c1.Name = "锁定" Then
                        Continue For
                    ElseIf nd1.Name = c1.Name And nd1.Checked = True Then
                        da(c1) = True
                    ElseIf nd1.Name = c1.Name And nd1.Checked = False Then 
                        da(c1) = False
                    End If
                Next
            End If
        Next        
        DataTables("授权表").SQLUpdate(das)
        DataTables("授权表").load
    Next
End If
[此贴子已经被作者于2022/6/12 23:18:15编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110744 积分:563646 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/13 8:30:00 [只看该作者]

For Each nd1 As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
        Dim das As List(Of DataRow) = DataTables("授权表").SQLSelect("[用户姓名] = '" & nd2.Name & "' And [版块管理] = '" & nd1.Name & "' And [权限分配] = '" & nd1.Name & "' And ([锁定] Is Null Or [锁定] = false)")
msgbox(das.count)
        For Each da As DataRow In das
            If da IsNot Nothing Then
                For Each c1 As DataCol In DataTables("授权表").DataCols
msgbox(c1.Name)
                    If c1.Name = "所属部门" OrElse c1.Name = "职位" OrElse c1.Name = "用户姓名" OrElse c1.Name = "版块管理" OrElse c1.Name = "表名" OrElse c1.Name = "权限分配" OrElse c1.Name = "锁定" Then
msgbox("Continue ")
                        Continue For
                    ElseIf nd1.Name = c1.Name And nd1.Checked = True Then
msgbox("c1=true")
                        da(c1) = True
                    ElseIf nd1.Name = c1.Name And nd1.Checked = False Then 
msgbox("c1=False")
                        da(c1) = False
                    End If
                Next
            End If
        Next        
        DataTables("授权表").SQLUpdate(das)

    Next
        DataTables("授权表").load
End If

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/6/13 19:38:00 [只看该作者]

    For Each c1 As DataCol In DataTables("授权表").DataCols
        If c1.Name = "所属部门" OrElse c1.Name = "职位" OrElse c1.Name = "用户姓名" OrElse c1.Name = "版块管理" OrElse c1.Name = "表名" OrElse c1.Name = "权限分配" OrElse c1.Name = "锁定" Then
            Continue For '上面这几列无需打勾,故跳过执行
            For Each nd1 As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
                If nd1.Level = 2 Then                
                    Dim Value() As String
                    Value = nd1.FullPath.Split("\")
                    Dim das As List(Of DataRow) = DataTables("授权表").SQLSelect("[用户姓名] = '" & nd2.Name & "' And [版块管理] = '" & Value(0) & "' And [权限分配] = '" & Value(1) & "' And ([锁定] Is Null Or [锁定] = false)")
                    msgbox(das.count) '无数据显示,应该是Value(0) 和Value(1)有问题,这里提取第一、二层字节名称不是这样写吗? 
                    For Each da As DataRow In das
                        If da IsNot Nothing Then 
                            If nd1.Name = c1.Name And nd1.Checked = True Then
                                da(c1) = True
                            ElseIf nd1.Name = c1.Name And nd1.Checked = False Then 
                                da(c1) = False
                            End If
                        End If
                    Next
                    DataTables("授权表").SQLUpdate(das)
                    DataTables("授权表").load
                End If 
            Next
        End If 
[此贴子已经被作者于2022/6/13 20:03:08编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110744 积分:563646 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/13 20:36:00 [只看该作者]

   For Each c1 As DataCol In DataTables("授权表").DataCols
        If c1.Name = "所属部门" OrElse c1.Name = "职位" OrElse c1.Name = "用户姓名" OrElse c1.Name = "版块管理" OrElse c1.Name = "表名" OrElse c1.Name = "权限分配" OrElse c1.Name = "锁定" Then
            Continue For '上面这几列无需打勾,故跳过执行
else
            For Each nd1 As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
                If nd1.Level = 2 Then                

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/6/13 20:58:00 [只看该作者]

完整代码:可以了,不过很卡,要等一会,能不能运行快点?
Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim nd2 As WinForm.TreeNode = trv2.SelectedNode
If nd2.Level = 2 Then
    Dim di As DataRow = DataTables("软件用户列表").SQLFind("[姓名] = '" & nd2.Name & "' And ([锁定] Is Null or [锁定] = false)")
    If di IsNot Nothing Then
        Dim rdo As WinForm.CheckBox
        rdo = e.Form.Controls("CheckBox1")
        If rdo.Checked = True Then
            di("授权权限") = True
        Else
            di("授权权限") = False
        End If
    End If
    di.Save()
    DataTables("软件用户列表").load
    For Each nd1 As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
        If nd1.Level = 2 Then                
            Dim Value() As String
            Value = nd1.FullPath.Split("\")
            Dim das As List(Of DataRow) = DataTables("授权表").SQLSelect("[用户姓名] = '" & nd2.Name & "' And [版块管理] = '" & Value(0) & "' And [权限分配] = '" & Value(1) & "' And ([锁定] Is Null Or [锁定] = false)")
            For Each da As DataRow In das
                If da IsNot Nothing Then
                    For Each c1 As DataCol In DataTables("授权表").DataCols
                        If c1.Name = "所属部门" OrElse c1.Name = "职位" OrElse c1.Name = "用户姓名" OrElse c1.Name = "版块管理" OrElse c1.Name = "表名" OrElse c1.Name = "权限分配" OrElse c1.Name = "锁定" Then
                            Continue For
                        ElseIf nd1.Name = c1.Name And nd1.Checked = True Then
                            da(c1) = True
                        ElseIf nd1.Name = c1.Name And nd1.Checked = False Then 
                            da(c1) = False
                        End If
                    Next
                End If
            Next
            DataTables("授权表").SQLUpdate(das)
            DataTables("授权表").load
        End If 
    Next
End If

 回到顶部
总数 21 1 2 3 下一页