以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教数据目录树的建立  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=32616)

--  作者:瞩望星空
--  发布时间:2013/5/5 11:27:00
--  请教数据目录树的建立

在输入人员的部门分配时,想通过目录树形式来完成。为此,已建立一个单位编号与单位名称的对应表(单位)

 
图片点击可在新窗口打开查看此主题相关图片如下:单位名称对应表.jpg
图片点击可在新窗口打开查看

分二个列,第一列为单位编号,5位数,顶层为00000,其后为00100,00110,00111,依次类推,第二列为单位名称。

 

现在想把“人员信息”表中的“单位”输入设置为目录树方式,请问如何修改?

 
图片点击可在新窗口打开查看此主题相关图片如下:目录树输入.jpg
图片点击可在新窗口打开查看

 

项目文件:

 

 

 


 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:人员管理.rar

[此贴子已经被作者于2013-5-5 11:31:01编辑过]

--  作者:lsy
--  发布时间:2013/5/5 11:51:00
--  
你这个实例,数据字典还方便些。
--  作者:瞩望星空
--  发布时间:2013/5/5 12:05:00
--  

使用数据字典不方便。单位名称总共有100个左右,有层次分布,使用目录树较为合适。

好象我这个例子目录树要用到递归函数。

[此贴子已经被作者于2013-5-5 12:08:24编辑过]

--  作者:lsy
--  发布时间:2013/5/5 13:06:00
--  
以下是引用瞩望星空在2013-5-5 12:05:00的发言:

使用数据字典不方便。单位名称总共有100个左右,有层次分布,使用目录树较为合适。

好象我这个例子目录树要用到递归函数。

[此贴子已经被作者于2013-5-5 12:08:24编辑过]

你的编码不规范,用不上递归函数。


--  作者:瞩望星空
--  发布时间:2013/5/5 13:13:00
--  
这是现有编号,不能修改。
--  作者:瞩望星空
--  发布时间:2013/5/5 16:54:00
--  
从原理上来讲,应该是可以实现的。就是把最后的“0”去除,显示出层次。
--  作者:狐狸爸爸
--  发布时间:2013/5/6 10:40:00
--  

你可以另外增加一个列,叫做“目录树编号”,这一列可以隐藏起来,以为这一列只是用于生成目录树。

然后设置Datacolchanged事件代码:

 

if e.datacol.name = "单位编号" Then

   e.Dataow("目录树编号") = e.DataRow("单位编号").Trim("0")

end if

 

这样就可以按照下面的帮助生成目录树了:

http://www.foxtable.com/help/topics/2502.htm

 


--  作者:瞩望星空
--  发布时间:2013/5/7 0:13:00
--  

谢谢狐爸。

忙了几个小时,终于把目录树的效果搞出来了。

但还有二个问题:

1、目录树的“大队”、“小队”前面,显示了目录树编号,影响了效果。不知道如何去除。

 


图片点击可在新窗口打开查看此主题相关图片如下:目录树.jpg
图片点击可在新窗口打开查看

2、双击目录树节点后,需要把相关的“单位编号”及“单位名称”填入到“ryxx”表中当前行对应的列中。

我写的代码不成功,能否可以修改:

 

内部函数:

Dim nd As WinForm.TreeNode = args(0)
Dim dt As DataTable = args(1)
For Each dr As DataRow In dt.DataRows
    Dim km As String = dr("目录树编号")
    If km.StartsWith(nd.name) AndAlso km.Length = nd.Name.Length + 1 Then
        Dim cd As Winform.TreeNode = nd.Nodes.Add(km,km & " " & dr("单位名称"))
        Functions.Execute("AddChildren",cd,dt)
    End If
Next

 

 

窗口调入代码:

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim nd As WinForm.TreeNode
Dim dt As DataTable = DataTables("单位编号表")
tr.StopRedraw()
tr.Nodes.Clear
tr.Nodes.Add("上级单位")
For Each dr As DataRow In dt.datarows
    If dr.IsNull("目录树编号") = False AndAlso dr("目录树编号").Length = 1 Then
\'        nd = tr.Nodes.Add(dr("目录树编号"),dr("目录树编号") & " " & dr("单位名称"))
\'        nd = tr.Nodes.Add(dr("目录树编号"),dr("单位编号") & "   " & dr("单位名称"))
        nd = tr.Nodes.Add(dr("目录树编号"),  dr("单位名称"))


        Functions.Execute("AddChildren",nd,dt)
    End If
Next
tr.ResumeRedraw()

 

目录树双击的代码:

Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
If e.Node.Name = "上级单位" Then
    Tables("ryxx").Current("单位编号")="00000"
    Tables("ryxx").Current("单位名称")="上级单位"
   
Else
    Tables("ryxx").Current("单位名称")=e.Node.Name
    \'Tables("ryxx").Current("单位编号")=             \'这里需要写入单位编号的代码.
   
End If

e.Form.Close

 

项目文件如下:

 

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

access数据库文件(见一楼)

[此贴子已经被作者于2013-5-7 11:47:27编辑过]