以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [分享]不用递归函数也能生成目录树,且更简单高效  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=144148)

--  作者:shenyl0211
--  发布时间: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()

--  作者:有点蓝
--  发布时间:2019/12/12 10:16:00
--  
多谢分享。

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

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