Foxtable(狐表)用户栏目专家坐堂 → [分享]不用递归函数也能生成目录树,且更简单高效


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

主题:[分享]不用递归函数也能生成目录树,且更简单高效

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[分享]不用递归函数也能生成目录树,且更简单高效  发帖心情 Post By:2019/12/12 10:02:00 [只看该作者]

不用递归函数也能生成目录树,且更简单高效。
下面以【行政区划】表为例(只有【区划代码】、【区划名称】、【区划年份】3列),生成省直辖市自治区和地州市盟二级目录树,全部代码如下:
        Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
        Dim nd As WinForm.TreeNode
        Dim dt As DataTable = DataTables("行政区划")
        Dim dr1,dr2 As DataRow
        Dim dm As String
        trv.StopRedraw()
        trv.Nodes.Clear
        For Each dr1 In dt.Select("区划代码 like '%0000' and 区划年份 = " & DMNF,"区划名称") '全局变量DMNF为采用的区划年份,可以事先获取
            dm = left(dr1("区划代码"),2) & "%"
            nd = trv.Nodes.Add(dr1("区划名称"))
            For Each dr2 In dt.Select("区划代码 like '" & dm & "' and 区划代码 like '%00' And 区划代码 not Like '%0000' And 区划年份 = " & DMNF,"区划名称")
                nd.Nodes.Add(dr2("区划名称"))
            Next
        Next
        trv.ResumeRedraw()

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


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

多谢分享。

这种知道明显是多少层的目录树就可以,也就是多套几个循环的问题。而递归就是为了适应不知道到底有多少层的情况的

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2019/12/12 17:26:00 [只看该作者]

一样通用的。比如北京、上海、天津、重庆、香港、澳门、台湾等7个是一层。却无需特殊代码。
有一点必须承认,就是设计的时候,肯定是限定了层数的。无论是会计科目,还是预算科目,或是例子的行政区划(本例是6位代码,如果必要可以精确到县,即最多3级),都一样是有限的。规则是管理系统的必备要素,离开规则就谈不上管理系统。比如限定数据类型,或限定字数,都是规则。当要求输入“是”或“否”的时候,就不能输入“对的”或“不是”。
一般不会超过4层,超过了就说明组织管理能力有问题。就跟限制字数一样,超过限定就要重新组织文字,而不是首先要求修改软件。
[此贴子已经被作者于2019/12/12 17:33:53编辑过]

 回到顶部