树形结构在开发中的应用
来源:互联网 发布:惠州网络问政投诉查询 编辑:程序博客网 时间:2024/06/09 15:56
树形结构的展示方式
数据库设计
列名 | 数据类型 | 描述 | 长度 | 主键 |
ID | Int | 节点编号 | 4 | 是 |
ConText | Nvarchar | 我们要显示的节点内容 | 50 | |
ParentID | Int | 父节点编号 | 4 | |
Depth | Int | 深度 | 4 |
CREATE TABLE [dbo].[tbTree] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Context] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[ParentID] [int] NULL
) ON [PRIMARY]
SET IDENTITY_INSERT tbtree ON
insert tbtree (ID,Context,ParentID) values ( 1,'中国',0)
insert tbtree (ID,Context,ParentID) values ( 2,'北京',11)
insert tbtree (ID,Context,ParentID) values ( 3,'天津',1)
insert tbtree (ID,Context,ParentID) values ( 4,'河北省',1)
insert tbtree (ID,Context,ParentID) values ( 5,'广东省',1)
insert tbtree (ID,Context,ParentID) values ( 6,'广州',5)
insert tbtree (ID,Context,ParentID) values ( 7,'四川省',1)
insert tbtree (ID,Context,ParentID) values ( 8,'成都',7)
insert tbtree (ID,Context,ParentID) values ( 9,'深圳',5)
insert tbtree (ID,Context,ParentID) values ( 10,'石家庄',4)
insert tbtree (ID,Context,ParentID) values ( 11,'辽宁省',1)
insert tbtree (ID,Context,ParentID) values ( 12,'大连',11)
insert tbtree (ID,Context,ParentID) values ( 13,'上海',1)
insert tbtree (ID,Context,ParentID) values ( 14,'天河软件园',6)
insert tbtree (ID,Context,ParentID) values ( 15,'汕头',5)
SET IDENTITY_INSERT tbtree off
有Depth(深度)字段时在VB6 中的实现 :
Dim CN As ADODB.Connection '定义数据库的连接
Dim Rs As ADODB.Recordset
'工程--->引用--->Microsoft ActiveX Data Object 2.x(版本号)
Private Sub Form_Load()
Set CN = New ADODB.Connection
‘连接数据库
CN.ConnectionString = "Provider=sqloledb;Data Source=pmserver;Initial Catalog=Benchmark;User Id=sa;Password=sa;"
CN.Open
Call AddTree(3)
End Sub
Private Sub AddTree(ByVal intDepth As Integer)
‘打开记录集,得到深度小于些深度的所有节点,并按深度排序
Set Rs = New ADODB.Recordset
Rs.Open "select * from tbTree where depth<='" & intDepth & "' order by depth", CN, adOpenDynamic, adLockReadOnly
Dim Xnod As Node
Do While Not Rs.EOF
If Rs.Fields("depth") = 0 Then
‘加入根结点
Set Xnod = TreeView1.Nodes.Add(, , "key" & Rs.Fields("id"), Rs.Fields("context"))
Else
‘加入子节点
Set Xnod = TreeView1.Nodes.Add("key" & Rs.Fields("parentid"), tvwChild, "key" & Rs.Fields("id"), Rs.Fields("context"))
End If
Xnod.EnsureVisible
Rs.MoveNext
Rs.Close
End Sub
没有Depth(深度)时的实现
CREATE PROCEDURE spGetTree (
@ID int)
as
set nocount on
declare @tmp table (Id int,ConText varchar(50),ParentID int,depth int)
insert @tmp select * from tbtree where ID=@ID
while exists(select 1 from tbtree a,@tmp b where a.ParentID=b.ID and a.ID not in (select ID from @tmp))
insert @tmp select a.* from tbtree a,@tmp b where a.ParentID=b.ID and a.ID not in (select ID from @tmp)
select * from @tmp
set nocount off
GO
Private Sub AddTreeEx(ByVal intID As Integer)
Set Rs = New ADODB.Recordset
Rs.Open "spGettree " & intID, CN, adOpenDynamic, adLockReadOnly
Dim Xnod As Node
Do While Not Rs.EOF
If Rs.Fields("parentID") = 0 Then
Set Xnod = TreeView1.Nodes.Add(, , "key" & Rs.Fields("id"), Rs.Fields("context"))
Else
Set Xnod = TreeView1.Nodes.Add("key" & Rs.Fields("parentid"), tvwChild, "key" & Rs.Fields("id"), Rs.Fields("context"))
End If
Xnod.EnsureVisible
Rs.MoveNext
Rs.Close
End Sub
Private ds As New DataSet ()
' AddTree递归函数每次都要用到数据集中的一个表,所以定义成private
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' '定义数据库连接
Dim CN As New SqlConnection()
Try
'初始化连接字符串
CN.ConnectionString = "data source=pmserver;initial catalog=Benchmark;persist security info=False;user id=sa;Password=sa;"
CN.Open()
'添加命令,从数据库中得到数据
Dim sqlCmd As New SqlCommand()
sqlCmd.Connection = CN
sqlCmd.CommandText = "select * from tbtree"
sqlCmd.CommandType = CommandType.Text
Dim adp As SqlDataAdapter = New SqlDataAdapter(sqlCmd)
adp.Fill(ds)
Catch ex As Exception
MsgBox(ex.Message)
Finally
'关闭连接
CN.Close()
End Try
'调用递归函数,完成树形结构的生成
AddTree(0, Nothing)
End Sub
'̀递归添加树的节点
Private Sub AddTree(ByVal ParentID As Integer, ByVal pNode As TreeNode)
Dim Node As TreeNode
Dim dvTree As New DataView()
dvTree = New DataView(ds.Tables(0))
'过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "PARENTID = " + ParentID.ToString
Dim Row As DataRowView
For Each Row In dvTree
If pNode Is Nothing Then '判断是否根节点
'̀添加根节点
Node = TreeView1.Nodes.Add(Row("context").ToString())
'̀再次递归
AddTree(Int32.Parse(Row("ID").ToString()), Node)
Else
‘添加当前节点的子节点
Node = pNode.Nodes.Add(Row("context").ToString())
'̀再次递归
AddTree(Int32.Parse(Row("ID").ToString()), Node)
End If
Node.EnsureVisible()
Next
End Sub
在C# 中实现:
http://support.microsoft.com/default.aspx?kbid=311318
http://support.microsoft.com/default.aspx?kbid=308063
http://support.microsoft.com/default.aspx?kbid=317597
http://support.microsoft.com/default.aspx?kbid=244954
- 树形结构在开发中的应用
- 树形结构在开发中的应用
- 树形结构在开发中的应用
- 树形结构在开发中的应用
- 树形结构在开发中的应用
- 树形结构在开发中的应用
- 树形结构在开发中的应用
- 树形结构在开发中的应用
- 树形结构在开发中的应用
- 树形结构在开发中的应用
- 树形结构在开发中的应用
- 树形结构在开发中的应用 thx: 李洪根
- 树形结构在开发中应用
- 树形结构在开发中的应用(C# TreeView数据动态绑定)
- 树形结构在开发中的应用(C# TreeView数据动态绑定)
- 递归算法,及其在树形结构中的应用
- hdu 4008 树形dp 时间戳在树形结构中的应用
- 工作分解结构在软件开发中的应用
- Collection Framework
- 局域网共享上网IP设置
- 权限设置的问题
- 软件控制代码编写思考
- Polymorphism
- 树形结构在开发中的应用
- 用vb编一个计算器,需要用到数组,看看下面的代码,欢迎来找碴!
- 实况8操作手册
- 开题第一篇
- [PHP] 对象的属性
- 压缩数据库日志
- 销售代表手册 第一章 销售代表的职责及要求
- 销售代表手册 第二章 销售代表应该随身携带的销售工具
- 销售代表手册 第三章 销售代表的销售热身运动