asp.net中树形图的实现 3
三、修改、移动树节点
由于服务器控件不支持鼠标拖动事件,所以不能象windows程序那样通过拖动移动节点,这里是通过选择父节点的方式。移动是通过在原位置删除,新位置添加实现的,要注意在删除时先保存节点信息。
private sub treeview1_selectedindexchange(byval sender as object, byval e as microsoft.web.ui.webcontrols.treeviewselecteventargs) handles treeview1.selectedindexchange
dim dv as new dataview()
dv.table = ds.tables("tree")
dim tmpnd as treenode = treendsel(e.oldnode), tmpnds as treenodecollection
dv.rowfilter= "nodeid=" & tmpnd.id
dv(0)("node_descript") = me.textbox1.text
dv(0)("address") = me.textbox2.text
dv(0)("target") = me.textbox3.text
dv(0)("icon") = me.textbox4.text
if dv(0)("parentid").tostring <> me.dropdownlist1.selecteditem.value then
‘移动节点
dv(0)("parent_name") = me.dropdownlist1.selecteditem.value
if me.dropdownlist1.selecteditem.value = "root" then
tmpnds = treeview1.nodes
else
tmpnds = fromidtonode(me.dropdownlist1.selecteditem.value, treeview1.nodes).nodes’新的父节点的nodes集合
end if
getndcol(e.oldnode).remove(tmpnd)
tmpnds.add(tmpnd)
end if
tmpnd.text = me.textbox1.text
tmpnd.imageurl = me.textbox4.text
tmpnd = treeview1.getnodefromindex(treeview1.selectednodeindex)
dv.rowfilter= "nodeid=" & tmpnd.id
me.textbox1.text = dv(0)("nodename").tostring
me.textbox2.text = dv(0)("address").tostring
me.textbox3.text = dv(0)("target").tostring
me.textbox4.text = dv(0)("icon").tostring
end sub
private function fromidtonode(byval id as string, byval nds as treenodecollection) as treenode
‘由关键字查找节点
dim i as integer
dim tmpnd as treenode, tmpnd1 as treenode
for each tmpnd in nds
if tmpnd.id = id then
return tmpnd
exit function
end if
tmpnd1 = fromidtonode(id, tmpnd.nodes)
if not (tmpnd1 is nothing) then
return tmpnd1
exit function
end if
next
return nothing
end function
四、结束语
以上阐述asp.net中树状显示的基本方法,以及如何在对树节点进行维护(增加、删除、修改、移动)的同时,修改数据库数据。由于篇幅所限,笔者在此只对基本思路和流程及关键步骤作了介绍,并未列出详细源代码,读者可自行完善。需要详细源代码者可与我联系,本文程序在vs.net、sqlserver、windows 2000、iis5.0下调试通过。