分享
 
 
 

treeview的使用小结

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

我最近做了一个程序。其中用到了treeview。在程序中,我在框架中使用了treeview。并且对treeview进行了节点的增加、删除、修改、遍历等操作。 在使用过程中,确实遇到了不少的问题。现在我把程序小结一下,希望和大家一起讨论。有什么不对的地方希望和高手们一起交流一下。也希望能对刚刚使用treeview的网友有一点帮助。

1.使用初步

(1)下载地址 http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp

(2)不显示树型的问题 首先:下载包分自动安装和手动安装两种包。 要下载大小约650K 的自动安装包。 其次:TreeView要求客户端浏览器版本为IE5.5及以上,最好要求客户端升级为IE6.0

(3)关于闪烁 将AutoPostBack属性设置为真,SelectedIndexChange才能被执行。不过这样的话刷新的很厉害。不要刷新的话,将AutoPostBack属性设置为FALSE.

(4)常用的几个属性和方法 ~Index 获取树节点在树节点集合中的位置。 ~Nodes 获取分配给树视图控件的树节点集合。 ~Parent 获取或设置控件的父容器。 ~SelectedNode 获取或设置当前在树视图控件中选定的树节点。 ~ExpandAll 展开所有树节点。 ~Checked 获取或设置一个值,用以指示树节点是否处于选中状态。 ~Text 获取或设置在树节点标签中显示的文本。 ~Expand 展开树节点。 ~Clear 清空树 ~Remove 从树视图控件中移除当前树节点。

(5)常用的几个操作:增加、删除、修改、剪切

@增加节点:

Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode()

Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode()

'NdSel 为当前选定的节点,新节点将作为它的子节点

NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)

tmpNd3.Text = "新增节点"

'在树中添加这个新节点

NdSel.Nodes.Add(tmpNd3)

@删除节点:

Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode()

Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode()

'NdSel 为当前选定的要删除节点,tmpNd3为它的父节点

NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)

If (Treepaybasic.SelectedNodeIndex <> "0")

Then tmpNd3 = NdSel.Parent tmpNd3.Nodes.Remove(NdSel)

Else Treepaybasic.Nodes.Clear() End If

@修改节点:

Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode()

NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)

NdSel.Text = "aaa"

@剪切和粘贴

剪切:

Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode()

Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode()

'NdSel 为当前选定的要删除节点,tmpNd3为它的父节点

NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)

'将剪切下来的节点存入session

Session("node") = NdSel

If (Treepaybasic.SelectedNodeIndex <> "0")

Then tmpNd3 = NdSel.Parent tmpNd3.Nodes.Remove(NdSel)

End If

粘贴:

Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode()

Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode()

'NdSel 为当前要粘贴节点的父节点

NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)

tmpNd3 = Session("node") NdSel.Nodes.Add(tmpNd3)

2.用递归生成树的算法和数据库设计

(1)递归说明 程序调用自身的编程方法称为递归(recursion)。在树的生成以及图的遍历中,递归用的很多。经典的算法求 n! (求n的阶乘)中,用的就是递归方法。递归算法的优点就是简洁,可扩充性好。但是缺点也很明显:低效。因为递归就是程序不断调用自身,对系统的资源消耗比较大。随着节点的增多,执行效率会变的很低。 为了解决树在生成过程中的层树不定的问题,同时也是为了让树的扩展性更好。树的生成使用了递归的方法。生成树的代码一旦写成,可以不改动源代码,生成无限级层次的树。树的结构完全由数据库中表的数据决定。

(2)数据库设计

创建一个数据库,设计树图信息表Treetable,表中属性包含Nodeid、Parentid、Nodename、Address等字段(分别用于表示节点的ID、父节点ID、节点名称、链接地址),其它属性根据实际用户需求和设计而定。节点名称Nodename将在树型控件的节点上显示,Nodeid字段保存节点的唯一标识号,Parentid表示当前节点的父节点ID号(例如有两个节点是父子关系,孩子节点的Parentid值就是其父节点的Nodeid),节点号父子相接组成了一个“链表”,表征并记录了树上节点的层次结构。 表具体设计如下:(简化模型,实际使用的要复杂一些) 主键 属性名 类型 长度 可空 属性含义 是 Nodeid int 6 否 节点ID Parentid int 6 否 父节点ID Nodename char 50 否 节点名称 Address char 80 可 链接地址 备注:链接地址 主要是用在: 树在框架中使用的环境。链接可以指向其他框架页中的地址或是带不同的参数。

(3)程序代码

――――――――――――递归函数―――――――――――― '生成树的函数

Private Sub inittree(ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal parentId As Integer)

Dim dv As New DataView()

Dim dvrow As DataRowView

Dim tmpNode As Microsoft.Web.UI.WebControls.TreeNode

'intId为数值型变量,其作用是记录并传递当前记录的ID,做为它子节点的PARENTID值

Dim intId As Integer

dv.Table = mySet.Tables("paybasic")

'parentId传递的是 additem函数中的intId.下面语句的作用是找出当前节点的子孩子集合。

dv.RowFilter = "parentID='" & parentId & "'"

'如果当前节点有孩子,则遍历所有的孩子,并调用递归函数。

For Each dvrow In dv

tmpNode = New Microsoft.Web.UI.WebControls.TreeNode()

'为当前节点的各个属性赋值。

tmpNode.ID = dvrow("nodeID")

tmpNode.Text = dvrow("nodename")

tmpNode.NavigateUrl = dvrow("Address")

intId = dvrow("parentID")

'添加一个节点

Nds.Add(tmpNode)

'调用递归函数

inittree(Nds(Nds.Count - 1).Nodes, intId)

Next

End Sub

――――――――――――――――调用递归函数―――――――――――――――――― CreateReaderDataSet() inittree(Treepaybasic.Nodes, 999)

―――――――――――――――――生成数据集―――――――――――――――――――

'生成数据集的函数

Private Sub CreateReaderDataSet()

'在运行时连接,并设置连接属性

MyConn = New System.Data.OleDb.OleDbConnection("Provider=MSDAORA.1;Data Source=oracle9;User ID=user;Password=****;")

'设置SelectCommand命令

myAdapter.SelectCommand = New System.Data.OleDb.OleDbCommand("select * from treenode", MyConn)

'填充数据集

myAdapter.Fill(mySet, "treenode")

End Sub

转贴:http://community.csdn.net/Expert/topic/4188/4188839.xml?temp=.3458216

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有