以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  授权求助  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=142472)

--  作者:cd_tdh
--  发布时间:2019/10/28 14:30:00
--  授权求助

老师,麻烦看看我以下代码授权,为什么加都集合有两个26,没有2,代码如下:

If Tables("用户管理").rows.Count=0 Then Return
Dim s As String = Nothing
\'加入到可见集合
Dim tr1 As WinForm.TreeView = e.Form.Controls("TreeView3")
For Each nd As WinForm.TreeNode In tr1.AllNodes  \'同步子节点选中状态
    If nd.Checked=True Then
        Dim dr As DataRow = DataTables("导航").Find("分类 = \'" & nd.name & "\' Or 分组 = \'" & nd.name & "\' or 名称 = \'" & nd.name & "\'")
        If dr IsNot Nothing Then
            If s<>Nothing Then s=s & ","
            s=s & dr("编号")
        End If
    End If
Next
Tables("用户管理").Current("菜单可见集合")=s

 

导航表结构和加载到集合结果如下:

  


图片点击可在新窗口打开查看此主题相关图片如下:导航表结构.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:集合.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2019/10/28 14:30:06编辑过]

--  作者:有点蓝
--  发布时间:2019/10/28 14:45:00
--  
nav26字符串包含nav2,建议把nav2改为nav02
--  作者:cd_tdh
--  发布时间:2019/10/28 14:57:00
--  

测试了02也是这种情况,1和11都可以,应该不是这个问题,2和26应该也行才对啊


--  作者:有点蓝
--  发布时间:2019/10/28 15:13:00
--  
Dim tr1 As WinForm.TreeView = e.Form.Controls("TreeView3")
For Each nd As WinForm.TreeNode In tr1.AllNodes  \'同步子节点选中状态
    If nd.Checked=True Then
msgbox("分类 = \'" & nd.name & "\' Or 分组 = \'" & nd.name & "\' or 名称 = \'" & nd.name & "\'")
        Dim dr As DataRow = DataTables("导航").Find("分类 = \'" & nd.name & "\' Or 分组 = \'" & nd.name & "\' or 名称 = \'" & nd.name & "\'")
        If dr IsNot Nothing Then
msgbox(dr("编号")) 查询到nav26的时候,上面显示什么条件
            If s<>Nothing Then s=s & ","
            s=s & dr("编号")
        End If
    End If
Next

--  作者:cd_tdh
--  发布时间:2019/10/28 15:19:00
--  

显示第一个26前:


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20191028151741.png
图片点击可在新窗口打开查看
显示第二个26前:


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

 

我后面的分类也是这种情况。

[此贴子已经被作者于2019/10/28 15:20:22编辑过]

--  作者:有点蓝
--  发布时间:2019/10/28 15:34:00
--  
查询条件的问题,使用的是or查询,也就是2和26都符合上面2个条件,默认取第一个。nav26的_sortkey或者_Identify应该比nav2小,所有都取nav26
--  作者:cd_tdh
--  发布时间:2019/10/28 15:51:00
--  
请教老师怎么修改?
--  作者:有点蓝
--  发布时间:2019/10/28 16:08:00
--  
我也不知道,这个是您的业务逻辑问题。自己把流程搞清楚。
--  作者:cd_tdh
--  发布时间:2019/11/1 10:18:00
--  

老师,我发现这个问题是因为有相同的名称造成的,相同名称不能避免,这个怎么来解决呢?

就是查询条件问题,还得请老师指点怎么来写这个条件,我分类、分组、名称的表结构如下:


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

[此贴子已经被作者于2019/11/1 10:19:36编辑过]

--  作者:有点蓝
--  发布时间:2019/11/1 10:24:00
--  
那就不要偷懒了,判断一下节点level,如果是第一级,

Dim dr As DataRow = DataTables("导航").Find("分类 = \'" & nd.name & "\' and 分组 is null")

第二级
Dim dr As DataRow = DataTables("导航").Find("分类 = \'" & nd.parnetnode.name & "\' and 分组 = \'" & nd.name & "\' and 名称 is null")

第三级
Dim dr As DataRow = DataTables("导航").Find("分类 = \'" & nd.parnetnode.parnetnode.name & "\' and 分组 = \'" & nd.parnetnode.name & "\' and 名称 = \'" & nd.name & "\'")