Foxtable(狐表)用户栏目专家坐堂 → 建立目录树


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

主题:建立目录树

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


加好友 发短信
等级:六尾狐 帖子:1446 积分:10688 威望:0 精华:0 注册:2014/8/13 16:19:00
建立目录树  发帖心情 Post By:2020/10/27 11:47:00 [只看该作者]

不知道为何报错了,感觉没啥问题啊?

表a结构和数据
   编码    名称      父编码
   001     文件1    Root
   002     文件2    001
   003     文件3    002
   004     文件4    Root

窗口中调用
Functions.Execute("com创建目录树","Root","共享文件夹","")

函数【com创建目录树】
Dim TreeView1 As WinForm.TreeView = Forms("窗口1").Controls("TreeView1")
Dim strNewNodeCode As String = args(0)
Dim strNewNodeName As String = args(1)
Dim strFatherNodeCode As String = args(2)
Dim cmd As New SQLCommand
cmd.ConnectionName = “连接1”
Dim dt As DataTable
Dim strFilter As String
Dim dr As DataRow

If strNewNodeCode = "Root" Then
    If TreeView1.nodes.Contains(strNewNodeCode) = False Then TreeView1.nodes.Add(strNewNodeCode,strNewNodeCode,"floder.png")   '建第一级目录

Else

    If TreeView1.nodes(strFatherNodeCode).nodes.Contains(strNewNodeCode) = False Then             '此处报错  未将对象引用设置到对象的实例。
        TreeView1.nodes(strFatherNodeCode).nodes.Add(strNewNodeCode,strNewNodeCode,"floder.png")   '建当前目录
    End If

End If

strFilter = " where 父编码 = '" & strNewNodeCode & "'"   '建当前目录的全部子目录

cmd.CommandText = "sele ct 编码,名称,父编码 from 表a " & strFilter 
dt = cmd.ExecuteReader()

For Each dr1 As DataRow In dt.DataRows
    Functions.Execute("com创建目录树",dr1("编码"),dr1("名称"),strNewNodeCode)
Next



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


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

args(2)传入的是一个空字符串,这个节点肯定是不存在的啊:TreeView1.nodes(strFatherNodeCode)。节点肯定要有名称才能访问的

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


加好友 发短信
等级:六尾狐 帖子:1446 积分:10688 威望:0 精华:0 注册:2014/8/13 16:19:00
  发帖心情 Post By:2020/10/27 13:02:00 [只看该作者]

就第一次调用的时候,这个args(2)是空字符串,后面调用都有的。
第一次调用创建一个root节点,有个判断的。所以没出错。

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


加好友 发短信
等级:超级版主 帖子:107757 积分:548124 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/27 13:44:00 [只看该作者]

就算传入其它名称,也有可能不存在,先判断一下

If TreeView1.nodes.Contains(strFatherNodeCode) andalso TreeView1.nodes(strFatherNodeCode).nodes.Contains(strNewNodeCode) = False Then    

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


加好友 发短信
等级:超级版主 帖子:107757 积分:548124 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/27 13:45:00 [只看该作者]

Elseif TreeView1.nodes.Contains(strFatherNodeCode)

    If TreeView1.nodes(strFatherNodeCode).nodes.Contains(strNewNodeCode) = False Then             '此处报错  未将对象引用设置到对象的实例。
        TreeView1.nodes(strFatherNodeCode).nodes.Add(strNewNodeCode,strNewNodeCode,"floder.png")   '建当前目录
    End If

End If

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


加好友 发短信
等级:六尾狐 帖子:1446 积分:10688 威望:0 精华:0 注册:2014/8/13 16:19:00
  发帖心情 Post By:2020/10/27 13:58:00 [只看该作者]

哦哦哦,应该查到问题了。
TreeView1.nodes(strFatherNodeCode).nodes.Add(“k123”,strNewNodeCode,"floder.png")      ’创建k123节点

再次引用时,TreeView1.nodes(“k123”)这个时候报错,说k123不存在。

需要带上父节点才能引用?


改成这样:
If strNewNodeCode = "Root" Then
    If TreeView1.nodes.Contains(strNewNodeCode) = False Then TreeView1.nodes.Add(strNewNodeCode,strNewNodeCode,"floder.png")   '建第一级目录

Else
if TreeView1.nodes.Contains(strFatherNodeCode) then
    If TreeView1.nodes(strFatherNodeCode).nodes.Contains(strNewNodeCode) = False Then             '此处报错  未将对象引用设置到对象的实例。
        TreeView1.nodes(strFatherNodeCode).nodes.Add(strNewNodeCode,strNewNodeCode,"floder.png")   '建当前目录
msgbox(strNewNodeCode & "已加入!")
    End If
else
msgbox(strFatherNodeCode & "不存在!")
end if

End If

提示信息为:
---------------------------
zddIP.Function
---------------------------
WJJ2000000004已加入!
---------------------------
确定   
---------------------------
---------------------------
zddIP.Function
---------------------------
WJJ2000000004不存在!
---------------------------
确定   
---------------------------

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


加好友 发短信
等级:超级版主 帖子:107757 积分:548124 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/27 14:07:00 [只看该作者]

TreeView1.nodes(strFatherNodeCode).nodes.Add(“k123”,   --  是加到第二级节点

TreeView1.nodes(“k123”)是第一级节点,肯定出错啊

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


加好友 发短信
等级:六尾狐 帖子:1446 积分:10688 威望:0 精华:0 注册:2014/8/13 16:19:00
  发帖心情 Post By:2020/10/27 14:14:00 [只看该作者]

嗯嗯,那咋整?我要引用"k123",它完整的父节点结构不知道了啊。咋引用?

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


加好友 发短信
等级:超级版主 帖子:107757 积分:548124 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/27 14:23:00 [只看该作者]

加上父节点的完整引用

TreeView1.nodes(strFatherNodeCode).nodes
(“k123”)

 回到顶部