Foxtable(狐表)用户栏目专家坐堂 → 请教数据目录树的建立


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

主题:请教数据目录树的建立

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


加好友 发短信
等级:二尾狐 帖子:531 积分:4727 威望:0 精华:0 注册:2013/4/20 20:08:00
请教数据目录树的建立  发帖心情 Post By:2013/5/5 11:27:00 [只看该作者]

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

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

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

 

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

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

 

项目文件:

 

 

 


 

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

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

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/5/5 11:51:00 [只看该作者]

你这个实例,数据字典还方便些。

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


加好友 发短信
等级:二尾狐 帖子:531 积分:4727 威望:0 精华:0 注册:2013/4/20 20:08:00
  发帖心情 Post By:2013/5/5 12:05:00 [只看该作者]

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

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

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

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/5/5 13:06:00 [只看该作者]

以下是引用瞩望星空在2013-5-5 12:05:00的发言:

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

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

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
瞩望星空
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:531 积分:4727 威望:0 精华:0 注册:2013/4/20 20:08:00
  发帖心情 Post By:2013/5/5 13:13:00 [只看该作者]

这是现有编号,不能修改。

 回到顶部
帅哥哟,离线,有人找我吗?
瞩望星空
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:531 积分:4727 威望:0 精华:0 注册:2013/4/20 20:08:00
  发帖心情 Post By:2013/5/5 16:54:00 [只看该作者]

从原理上来讲,应该是可以实现的。就是把最后的“0”去除,显示出层次。

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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

 


 回到顶部
帅哥哟,离线,有人找我吗?
瞩望星空
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:531 积分:4727 威望:0 精华:0 注册:2013/4/20 20:08:00
  发帖心情 Post By: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编辑过]

 回到顶部