以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  有没有根据目录树自动生成数字形式的级码的代码?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=57822)

--  作者:kolen
--  发布时间:2014/10/5 10:48:00
--  有没有根据目录树自动生成数字形式的级码的代码?
目录树现在有了,希望生成的级码像以下《帮助文件》中的表中的“级码”字段的1.2.1这样的数字形式。有没有现成的代码呀?

我的目录树是手工修改生成的,利用插入节点等按钮。但是标题是我想要的,但是节点名字还是“新节点”。

http://www.foxtable.com/help/topics/2622.htm
[此贴子已经被作者于2014-10-5 10:56:10编辑过]

--  作者:有点甜
--  发布时间:2014/10/5 10:57:00
--  

例子

 

下载信息  [文件大小:296.0 KB  下载次数:11]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.table


--  作者:客人
--  发布时间:2014/10/5 11:40:00
--  
甜老师,这个是用数字在增加节点的时候就将节点名字用数字重命名好了,但是我这里有按钮特别多,有“重命名”,“增加根节点”“增加子节点”“插入节点”“上移”“下移”“左移”“右移”“删除”等按钮。所以这样就需要每个按钮的代码考虑“数字name编码的问题”。
我想能否后期做的个按钮,把代码写在里面,一个循环,全部一次性根据目录树结构,命名好这个“数字级码”呢?


--  作者:有点甜
--  发布时间:2014/10/5 11:42:00
--  
 最后不是有一个保存按钮么?你要怎么操作都可以,最后保存的时候,就是重新按照顺序生成的啊
--  作者:kolen
--  发布时间:2014/10/5 11:43:00
--  
甜老师,这个例子是用数字在增加节点的时候就将节点名字用数字重命名好了,但是我这里有按钮特别多,有“重命名”,“增加根节点”“增加子节点”“插入节点”“上移”“下移”“左移”“右移”“删除”等按钮。所以这样就需要每个按钮的代码考虑“数字name编码的问题”。一个“上移”操作,就需要重新调整“级码数字”。
我想能否后期做的个按钮,把代码写在里面,一个循环,全部一次性根据目录树结构,命名好这个“数字级码”呢?

--  作者:有点甜
--  发布时间:2014/10/5 11:46:00
--  
  看4楼,最后 一次性保存。
[此贴子已经被作者于2014-10-5 11:46:06编辑过]

--  作者:kolen
--  发布时间:2014/10/5 13:06:00
--  
老师你看我加了其他按钮,马上就不行了你这个“保存按钮”。
你这个例子里,只要删除一个节点马上问题出现。
假设:1.1, 1.2, 1.3三个节点,删除节点1.2后,点击保存按钮,级码那里还是1.1,  1.3, 没有更新到1.1,  1.2,另外如果出现“左移,右移,上移,下移”的情况就更加不行了。
所以我要重新设计保存按钮的代码。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:数字级码生成.table

[此贴子已经被作者于2014-10-5 13:07:57编辑过]

--  作者:有点甜
--  发布时间:2014/10/5 14:41:00
--  

 代码如下

 

Dim dt As DataTable = DataTables("表A")
dt.DataRows.Clear
Dim dic As New Dictionary(of Integer, Integer)

For Each nd As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
    If nd.Level = 0 AndAlso dic.count > 0 Then
        Dim temp = dic(0)
        dic.Clear
        dic.Add(0, temp)
    End If
    If dic.ContainsKey(nd.Level) = False Then
        dic.Add(nd.Level, 1)
    Else
        dic(nd.Level) = dic(nd.Level) + 1
    End If
    Dim ndr As DataRow = dt.AddNew
    Dim str As String = ""
    For i As Integer = 0 To nd.Level
        str &= dic(i) & "."
    Next
    ndr("第一列") = str.TrimEnd(".")
    ndr("第二列") = nd.Text
Next


--  作者:kolen
--  发布时间:2014/10/5 14:56:00
--  
还有一点问题,看例子表格或截图。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:数字级码生成.table

图片点击可在新窗口打开查看此主题相关图片如下:截图00.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2014-10-5 15:04:31编辑过]

--  作者:有点甜
--  发布时间:2014/10/5 15:05:00
--  

代码

 

Dim dt As DataTable = DataTables("表A")
dt.DataRows.Clear
Dim dic As New Dictionary(of Integer, Integer)
Dim prevLevel As Integer = 0
For Each nd As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
    If dic.ContainsKey(nd.Level) = False Then
        dic.Add(nd.Level, 1)
    Else
        If nd.level < prevLevel Then
            dic(prevLevel) = 0
        Else
            dic(nd.Level) = dic(nd.Level) + 1
        End If
        prevLevel = nd.Level
    End If
    Dim ndr As DataRow = dt.AddNew
    Dim str As String = ""
    For i As Integer = 0 To nd.Level
        str &= dic(i) & "."
    Next
    ndr("第一列") = str.TrimEnd(".")
    ndr("第二列") = nd.Text
Next