以文本方式查看主题

-  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=45409)

--  作者:jswalley
--  发布时间:2014/1/24 13:06:00
--  一个目录树操作实现问题
我之前用VC开发的一个通讯录管理功能,包括分组目录(可以没有限制),最后是联系人。 数据库表是这样设计的

字段名

数据类型

是否为空

数据格式

备注

        NodeID

Integer

No PK

长整型

节点ID

        NodeName

varchar (120)

No

 

节点名称

        ParentID

Integer

No

长整型

父级编号

        NodeType

Integer

 

No

 

节点类型、0表示目录、1表示个人联系人信息


ParentID = -1 表示根节点,如果是目录然后通过递归调用方式,搜索每个父节点的子节点,加入到VC的目录树控件中。实现联系人分组及联系人
的树状列表信息。

用FoxTable来实现,我看了目录树例子,好像都不适合这样的应用,界面生成及数据库表结构如何设计? 请高人指点?

[此贴子已经被作者于2014-1-24 13:08:24编辑过]

--  作者:飞天
--  发布时间:2014/1/24 13:19:00
--  
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.GenerateTree(
"通讯录","级码","名称", ".")



--  作者:jswalley
--  发布时间:2014/1/24 13:51:00
--  
Foxtable目录的级码是1,1.1,1.1.1,1.1.1.1这样,这样我联系人的删除、修改、移动操作都非常麻烦,我之前的设计,只要删除、修改一下父节点的ID号就可以的。
--  作者:逛逛
--  发布时间:2014/1/24 13:59:00
--  

没有例子,不能测试

 

如下代码,试一下

 

’目录树的BeforeExpandNode 事件

 

Dim sql As String =  "Select  NodeID, NodeName ,NodeType  FROM 表名 WHERE ParentID = " & e.Node.Name
Dim cmd As new SQLCommand
cmd.ConnectionName = 数据源   ‘如果是外部表,就加上
Dim dt As DataTable
cmd.CommandText = sql
dt = cmd.ExecuteReader()
if dt Is NoThing Then Return
e.Sender.StopRedraw()
e.Node.Nodes.Clear
Dim nd As WinForm.TreeNode
For Each dr As DataRow In dt.DataRows
   nd = e.Node.Nodes.Add(dr("NodeID"),dr("NodeName"))
    If dr("NodeType") = 0 Then
        nd.Nodes.Add("")
    End If
Next
e.Sender.ResumeRedraw()

 


\'控件窗口的AfterLoad  事件

Dim sql As String =  "Select  NodeID, NodeName  FROM 表名 WHERE ParentID = -1 "
Dim cmd As new SQLCommand
cmd.ConnectionName = 数据源   ‘如果是外部表,就加上
Dim dt As DataTable
cmd.CommandText = sql
dt = cmd.ExecuteReader()
if dt Is NoThing Then Return
Dim tv As WinForm.TreeView = e.Form.Controls("TreeView1") ‘实际的控件名
Dim nd As WinForm.TreeNode
tv.StopRedraw()
For Each dr As DataRow In dt.DataRows
   nd = tv.Nodes.Add(dr("NodeID"),dr("NodeName"))
   nd.Nodes.Add("")
Next
tv.ResumeRedraw()
tv.Select