Foxtable(狐表)用户栏目专家坐堂 → [求助]目录树第二个节点问题


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

主题:[求助]目录树第二个节点问题

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


加好友 发短信
等级:三尾狐 帖子:683 积分:5399 威望:0 精华:0 注册:2015/1/23 0:31:00
[求助]目录树第二个节点问题  发帖心情 Post By:2018/9/29 13:26:00 [只看该作者]

我要生成一个授权表,用目录树的形式授权,第二个节点代码出现问题,会报错,请问这个应该怎么改,msgbox(dr2("父节点") & ":" & dr2("子节点"))测试的时候全部都能正常显示,但是加上标色那段代码就会出错
Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim mc As String = "& e.Node.Name &"
Dim drs As List(Of DataRow) = DataTables("用户_授权").Select("用户 like '*"& e.Node.Name &"*'")

'选择不同行时清除选择状态
For Each nd As WinForm.TreeNode In trv2.AllNodes
    nd.Checked = False
Next

For Each dr1 As DataRow In DataTables("用户_授权").Select("用户 like '*"& e.Node.Name &"*' and 子节点 is null")
    trv2.Nodes(dr1("父节点")).Checked = dr1.IsNull("父节点") = False AndAlso dr1.IsNull("子节点") = True
Next

For Each dr2 As DataRow In DataTables("用户_授权").Select("用户 like '*"& e.Node.Name &"*' and 子节点 is not null")
   trv2.Nodes(dr2("父节点")).Nodes(dr2("子节点")).Checked =  dr2.IsNull("子节点") = False
Next

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/9/29 14:55:00 [只看该作者]

具体提示什么错误?目录树是怎么样生成的?

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


加好友 发短信
等级:三尾狐 帖子:683 积分:5399 威望:0 精华:0 注册:2015/1/23 0:31:00
回复:(有点蓝)具体提示什么错误?目录树是怎么样生...  发帖心情 Post By:2018/9/29 15:48:00 [只看该作者]

目录树更具表和导航页面内容生成
提示的错误信息是:
错误所在事件:窗口,用户授权,TreeView1,AfterSelectNode
详细错误信息:
未将对象引用设置到对象的实例。

生成目录树代码:
Dim yh As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim ck As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim dhc As WinForm.TopicBar = Forms("导航栏").Controls("TopicBar1")
'导航页面目录树
For Each page As WinForm.TopicPage In dhc.Pages
    If ck.Nodes.Contains(page.Name) = False Then
        ck.Nodes.Add(page.Name)
    End If
    For Each link As WinForm.TopicLink In page.Links
        ck.Nodes(page.Name).Nodes.Add(link.Text.trim("←"))
    Next
Next

yh.BuildTree("用户_用户表","用户名")

ck.ExpandAll
ck.Nodes(0).Collapse

边目录树AfterSelectNode代码:
Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim mc As String = "& e.Node.Name &"
Dim drs As List(Of DataRow) = DataTables("用户_授权").Select("用户 like '*"& e.Node.Name &"*'")

'选择不同行时清除选择状态
For Each nd As WinForm.TreeNode In trv2.AllNodes
    nd.Checked = False
Next

For Each dr1 As DataRow In DataTables("用户_授权").Select("用户 like '*"& e.Node.Name &"*' and 子节点 is null")
    trv2.Nodes(dr1("父节点")).Checked = dr1.IsNull("父节点") = False AndAlso dr1.IsNull("子节点") = True
Next

For Each dr2 As DataRow In DataTables("用户_授权").Select("用户 like '*"& e.Node.Name &"*' and 子节点 is not null")
    trv2.Nodes(dr2("父节点")).Nodes(dr2("子节点")).Checked = dr2.IsNull("父节点") = False AndAlso dr2.IsNull("子节点") = False
Next


右边目录树AfterCheckNode代码:
Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim nd1 As WinForm.TreeNode = trv1.SelectedNode
Dim nd2 As WinForm.TreeNode = trv2.SelectedNode
Dim dr As DataRow
Dim sl As Integer

If nd2.Level = 0 Then
    dr = DataTables("用户_授权").Find("父节点 = '"& e.Node.Name &"'")
ElseIf nd2.Level = 1 Then
    dr = DataTables("用户_授权").Find("父节点 = '"& e.Node.ParentNode.Name &"' and 子节点 = '"& e.Node.Name &"'")
End If



If e.Node.IsSelected = True
    If dr("用户").contains(nd1.Text) = False
        If  dr.IsNull("用户")
            dr("用户") = nd1.Text
        Else
            dr("用户") = dr("用户")  & "," & nd1.Text
        End If
    ElseIf e.Node.Checked = False
        Dim ss() As String  = dr("用户").split(",")
        Dim lst As new List(of String)
        lst.AddRange(ss)
        lst.remove(nd1.Text)
        dr("用户") = String.Join(",",lst.ToArray())
    End If
End If







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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/9/29 15:55:00 [只看该作者]

目录树节点是从导航栏生成的,后面是通过表格取节点值,导航栏和DataTables("用户_授权")肯定有不一致的名称,所以找不到节点

For Each dr2 As DataRow In DataTables("用户_授权").Select("用户 like '*"& e.Node.Name &"*' and 子节点 is not null")
    trv2.Nodes(dr2("父节点")).Nodes(dr2("子节点")).Checked = dr2.IsNull("父节点") = False AndAlso dr2.IsNull("子节点") = False
Next

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


加好友 发短信
等级:三尾狐 帖子:683 积分:5399 威望:0 精华:0 注册:2015/1/23 0:31:00
回复:(有点蓝)目录树节点是从导航栏生成的,后面是...  发帖心情 Post By:2018/9/29 16:00:00 [只看该作者]

我在项目的AfterOpenProject事件中写入代码,将导航栏的名称节点写入这个表里面,所以数据都是一样的
    '导航栏节点数据导入授权表
    Dim dhc As WinForm.TopicBar = Forms("导航栏").Controls("TopicBar1")
    '导航页面目录树
    For Each page As WinForm.TopicPage In dhc.Pages
        Dim dr As DataRow = DataTables("用户_授权").Find("父节点 = '"& page.Name &"'")
        If dr Is Nothing Then
            dr = DataTables("用户_授权").AddNew
            dr("父节点") = page.Name
        End If
        For Each link As WinForm.TopicLink In page.Links
            Dim dr1 As DataRow = DataTables("用户_授权").Find("父节点 = '"& page.Name &"' And 子节点 = '"& link.Text &"'")
            If dr1 Is Nothing Then
                dr1 = DataTables("用户_授权").AddNew
                dr1("父节点") = page.Name
                dr1("子节点") = link.Text
            End If
        Next
    Next

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/9/29 16:19:00 [只看该作者]

肯定有不一样的数据

For Each dr2 As DataRow In DataTables("用户_授权").Select("用户 like '%" & e.Node.Name & "%' and 子节点 is not null")
    Dim n = trv2.Nodes(dr2("父节点"))
    If n.text > "" Then
        Dim n2 = n.Nodes(dr2("子节点"))
        If n2.text > "" Then
            n2.Checked = dr2.IsNull("父节点") = False AndAlso dr2.IsNull("子节点") = False
        Else
            msgboc("不存在" & dr2("子节点"))
        End If
    Else
        msgboc("不存在" & dr2("父节点"))
    End If
Next

 回到顶部