以文本方式查看主题

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

--  作者:jygyyl
--  发布时间:2014/9/15 15:30:00
--  [求助]目录树问题
请教个关于外部数据表用递归函数生成目录树的问题:

有没有办法在不添加外部数据表的情况下,用递归函数生成目录树?

我的自定义函数AddChildren内容如下:
Dim nd As WinForm.TreeNode = args(0)
Dim dt As DataTable = args(1)
Dim drs As List(of DataRow)
drs = dt.Select("[parentid] = \'" & nd.name & "\'")
For Each dr As DataRow In drs
    Dim cd As Winform.TreeNode = nd.Nodes.Add(dr("objname"),dr("objjc"))
    Functions.Execute("AddChildren",cd,dt)
Next

自定义函数“数据提取”的内容如下:
\'做一个通用的数据提取函数

Dim sql As String = Args(0)  \'sql语句

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = sql
dt = cmd.ExecuteReader()
Return dt


下拉窗口代码如下:
Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim nd As WinForm.TreeNode

Dim sql As String = "Select a.objid, a.objjc, (Select Count(objid) FROM D020 WHERE parentid = a.objid) As 下级数 " _
 &  " FROM D020 As a WHERE a.objtype = 1 "

Dim dt As DataTable = Functions.Execute("wis数据提取",sql)

tr.StopRedraw()
tr.Nodes.Clear
\'tr.Nodes.Add("全部")  \'这么大的数据量,就不要加全部了
For Each dr As DataRow In dt.datarows
     nd = tr.Nodes.Add(dr("objid"),dr("objjc"))
     If dr("下级数") > 0 Then
        nd.Nodes.Add("空")
    End If  
Next
tr.ResumeRedraw()
[此贴子已经被作者于2014-9-15 15:38:46编辑过]

--  作者:有点甜
--  发布时间:2014/9/15 15:32:00
--  

可以

 

Dim cmd As New SQLCommand
Dim
dt As DataTable
cmd.ConnectionName =
"行政区域"
cmd.CommandText =
"SELECT DISTINCT 省市 From {行政区域}"
dt = cmd.ExecuteReader


--  作者:jygyyl
--  发布时间:2014/9/15 15:53:00
--  回复:(有点甜)可以 Dim cmd As New SQLCo...
求甜大师帮忙修改一下我的代码,谢谢!
--  作者:Bin
--  发布时间:2014/9/15 15:57:00
--  
http://www.foxtable.com/help/topics/2502.htm
--  作者:有点甜
--  发布时间:2014/9/15 16:01:00
--  

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim nd As WinForm.TreeNode


Dim sql As String = "Select a.objid, a.objjc, (Select Count(objid) FROM D020 WHERE parentid = a.objid) As 下级数 " _
 &  " FROM D020 As a WHERE a.objtype = 1 "


Dim dt As DataTable = Functions.Execute("wis数据提取",sql)


tr.StopRedraw()
tr.Nodes.Clear
\'tr.Nodes.Add("全部")  \'这么大的数据量,就不要加全部了
Dim drs As List(of DataRow)
drs = dt.Select("[parentid] is null")
For Each dr As DataRow In drs
     nd = tr.Nodes.Add(dr("objid"),dr("objjc"))
     Functions.Execute("AddChildren",nd,dt)
Next
tr.ResumeRedraw()


--  作者:jygyyl
--  发布时间:2014/9/15 16:25:00
--  提示错误
提示“未找到列 [parentid]。”不知道改哪?
--  作者:有点甜
--  发布时间:2014/9/15 16:30:00
--  
以下是引用jygyyl在2014-9-15 16:25:00的发言:
提示“未找到列 [parentid]。”不知道改哪?

 

那你的代码就全部写错了。

 

例子发上来,不清楚你表格的结构是什么。


--  作者:jygyyl
--  发布时间:2014/9/15 16:43:00
--  回复甜大师
 数据表如下,代码在一楼(可以生产目录树,但必须添加外部数据表。我的项目类似数据表近100个,不想全部添加),求大师指点!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:shuju.zip


[此贴子已经被作者于2014-9-15 16:46:35编辑过]

--  作者:有点甜
--  发布时间:2014/9/15 16:46:00
--  

 你要的,就是4楼那个啊

 

http://www.foxtable.com/help/index.html?n=2502.htm

 


--  作者:jygyyl
--  发布时间:2014/9/15 16:51:00
--  回复:(有点甜) 你要的,就是4楼那个啊 ...
编码规则不一样,我的编码是15位,前6位是两位递进,后9位是3位递进。不会套用。