以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]目录树第二个节点问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=125490)

--  作者:紫色幽魂
--  发布时间: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

--  作者:有点蓝
--  发布时间:2018/9/29 14:55:00
--  
具体提示什么错误?目录树是怎么样生成的?
--  作者:紫色幽魂
--  发布时间: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







--  作者:有点蓝
--  发布时间: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

--  作者:紫色幽魂
--  发布时间: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

--  作者:有点蓝
--  发布时间: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