以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  调取生成目录树的数据赋值,提示未引用对象实例  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=153960)

--  作者:weibu
--  发布时间:2020/8/29 8:57:00
--  调取生成目录树的数据赋值,提示未引用对象实例
老师,我生成目录树使用一个表中的mid列值作为生成目录树层级,现在下面代码提示未引用对象实例是啥原因?
Dim dr As DataRow = nd.DataRow \'获取生成此节点的DataRow
tr("mid") = dr("mid")

--  作者:有点蓝
--  发布时间:2020/8/29 9:01:00
--  
贴出生成目录树和点击目录树的完整代码
--  作者:weibu
--  发布时间:2020/8/29 15:54:00
--  
生成目录树的代码
Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim nd As WinForm.TreeNode
Dim dt As DataTable = DataTables("minfor")
tr.StopRedraw()
tr.Nodes.Clear
\'tr.Nodes.Add("全部")
For Each dr As DataRow In dt.datarows
    If dr.IsNull("parentid") Then
        nd = tr.Nodes.Add(dr("mid"),dr("mname"))
        Functions.Execute("AddChildren1",nd,dt)
    End If
Next
tr.ResumeRedraw()

点击目录树筛选代码:
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim ids As String
Dim nd As WinForm.TreeNode
Dim pd As WinForm.TreeNode
Dim key As String = e.Node.Name
If key = "全部" Then
    Tables("mframe").Filter = ""
Else
For Each nd In e.node.allNodes \'清除子节点的选中标记
    nd.Checked = False
Next
pd = e.Node.ParentNode
Do While pd IsNot Nothing \'清除父节点的选中标记
    pd.Checked = False
    pd = pd.ParentNode
Loop
For Each nd In trv.AllNodes
    pd = nd
    Do While pd IsNot Nothing
        If pd.Checked  Then
            If ids > "" Then
                ids= ids &  ","
            End If
            ids = ids & "\'" & nd.name & "\'"
            Exit Do
        Else
            pd = pd.ParentNode
        End If
    Loop
Next
If ids > "" Then
    Tables("mframe").Filter = "mid In (" & ids & ")"
 End If
End If

--  作者:有点蓝
--  发布时间:2020/8/29 16:03:00
--  
这种手工添加节点的用法是不存在此节点的DataRow的,也就是nd.DataRow是不存在的,只能通过nd.name去表格里查询到对应的DataRow
--  作者:weibu
--  发布时间:2020/8/29 16:27:00
--  
谢谢老师
[此贴子已经被作者于2020/8/29 16:43:17编辑过]

--  作者:有点蓝
--  发布时间:2020/8/29 16:41:00
--  
那就改为唯一性的字段,比如编号,或者主键列