`

ASP.NET中树形图的实现

阅读更多

来自:DotNET中文技术网

树形图用于显示按照树形结构进行组织的数据,其用途比较广泛,如计算机中的文件系统(Windows中的资源管理器)、企业或公司的组成结构等。我们知道在Windows下VB、PB、Delphi等工具提供了一个功能很强的树型控件TreeView,利用Treeview控件可以方便地开发树形图。然而在网页上实现树形图就不那么容易了,现在在ASP.NET中利用微软提供的Internet Explorer WebControls它使得网页上的树形图开发与在Windows下一样的方便,一样的功能强大,甚至更灵活。

  本文介绍用Internet Explorer WebControls开发树形图的方法,由于树形图结构较复杂,使用起来常不知如何下手。笔者结合最近刚为公司用ASP.NET编写的应用程序管理器这一具体实例,详细阐述在ASP.NET下如何将Internet Explorer WebControls的使用与数据库联系起来,实现数据分任意多层显示,方便地进行增加、修改、删除、移动操作。笔者希望通过对该实例的阐述,达到抛砖引玉的效果,与各位同仁相互交流,共同进步。

  Internet Explorer WebControls不在VS.NET的标准Server Control中,要到微软的站点上下载,下载地址是:http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp 下载安装后第一次使用时,要右击工具箱Customize Toolbox…→.NET Framework Components中找到Micosoft.Web.UI.WebControls.Treeview后选中,这样Treeview控件就出现在工具箱中了。

  一、树的建立

  具体方法是:创建一个数据库,设计树图信息表TREE_INFO,包含NODEID、PARENTID、NODENAME、ADDERSS、ICON字段,其它字段根据实际业务而定,节点名称NODENAME将在树型控件的节点上显示,NODEID字段保存节点的唯一标识号,PARENTID表示当前节点的父节点号,标识号组成了一个“链表”,记录了树上节点的结构。设计一个Web窗体其上放置TreeView控件。

Private Sub CreateDataSet()’建立数据集 
Dim myConn As New SqlConnection()
Dim myCmd As New SqlCommand("select NODEID,NODENAME,PARENTID,ADDRESS,ICON from Tree_info", myConn)
Dim myDataAdapter As New SqlDataAdapter()
myConn.ConnectionString = Application("connectstring")
myCmd.CommandText = ""
myCmd.Connection = myConn
myDataAdapter.SelectCommand = myCmd
myDataAdapter.Fill(ds, "tree")
End Sub

  建树的基本思路是:从根节点开始递归调用显示子树

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
CreateDataSet()
intiTree(TreeView1.Nodes, 0)
End Sub
Private Sub intiTree(ByRef Nds As TreeNodeCollection, ByVal parentId As Integer)
Dim dv As New DataView()
Dim drv As DataRowView
Dim tmpNd As TreeNode
Dim intId As Integer
dv.Table = ds.Tables("tree")
dv.RowFilter = "PARENTID=’" & parentId & "’"
For Each drv In dv
tmpNd = New TreeNode()
strId = drv("NODE_ID")
tmpNd.ID = strId
tmpNd.Text = drv("NODE_NAME ")
tmpNd.ImageUrl = drv("ICON").ToString
Nds.Add(tmpNd)
intiTree(Nds(Nds.Count - 1).Nodes, intId)
Next
End Sub

二、增加、删除树节点

  单纯在Treeview 上增加、删除、修改节点只需用Nodes属性的Add、 Remove、等方法即可,值得注意的地方是VS.NET中Treeview的Nodes集合与VS6.0中的区别,VS6.0中的是一个大的集合,而VS.NET中的是分层的每个Node下都有Nodes属性。增加、删除、修改树节点时与VS6.0相比有很大差别,特别是删除时。

Private Sub ButAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButAdd.Click’在选定的节点下添加子节点 
Dim tmpNd As New TreeNode(), NdSel As TreeNode
tmpNd.ID = GetNewId()
NdSel = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex)’选中的节点
tmpNd.Text = "新节点"
NdSel.Nodes.Add(tmpNd)
Dim myRow As DataRow
myRow = ds.Tables("tree").NewRow()
myRow("NODE_NAME") = tmpNd.ID
myRow("NODE_DESCRIPT") = "新节点" & tmpNd.ID & "_" & NdSel.ID
myRow("PARENT_NAME") = NdSel.ID
ds.Tables("tree").Rows.Add(myRow)
End Sub
Private Sub ButDele_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButDele.Click’删除选中的节点
Dim idx As String = TreeView1.SelectedNodeIndex()
GetNdCol(idx).Remove(TreeView1.GetNodeFromIndex(idx))
Dim dv As New DataView(), recNo As Integer
dv.Table = ds.Tables("tree")
dv.RowFilter= "NODEID=" & NdId
dv.Delete(0)
End Sub
Private Function GetNdCol(ByVal idx As String) As TreeNodeCollection
‘获得选中节点的父节点的Nodes集合
Dim cnt As Integer, i As Integer
Dim tmpNds As TreeNodeCollection
Dim idxs() As String
idxs = Split(idx, ".")
cnt = UBound(idxs)
If cnt = 0 Then
tmpNds = TreeView1.Nodes
Else
tmpNds = TreeView1.Nodes(CInt(idxs(0))).Nodes
For i = 1 To cnt - 1
tmpNds = tmpNds(CInt(idxs(i))).Nodes
Next
End If
Return tmpNds
End Function
三、修改、移动树节点

  由于服务器控件不支持鼠标拖动事件,所以不能象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下调试通过。

分享到:
评论

相关推荐

    ASP.NET生成树形显示的GridView实现思路

    目的:生成树形结构的表格数据(EasyUI也有TreeGrid,此处只是提供一个思路),可以扩展单击展开/收缩节点 图例: 类代码: 代码如下: using System; using System.Data; /// &lt;summary&gt; ///GridViewHelper 的摘要...

    ASP.NET【鲜花销售系统】

    ASP.NET源程序,自己本人做的课程设计,对刚学ASP.NET的人来说可以借鉴。希望对你有帮助。本程序是在线鲜花销售系统,涉及到购物车、模版、树形结构等功能

    ComponentOne Studio for ASP.NET Wijmo 2014 V3

    ComponentOne Studio for ASP.NET Wijmo 专门为网页设计窗体而开发,功能强大,覆盖全面,是 ASP.NET 平台全能用户界面开发控件套包; ComponentOne Studio for ASP.NET Wijmo 拥有40多个不同风格的高性能且易于...

    第9章 ASP.NET导航控件应用(《ASP.NET开发实战1200例(第Ⅰ卷)》)

    第9章 ASP.NET导航控件应用 405 9.1 使用树形导航条控件(TreeView) 406 实例254 使用TreeView控件实现OA系统导航 406 实例255 动态向TreeView控件中添加节点 408 实例256 为TreeView控件节点添加复选框 409 ...

    ASP.NET树形菜单Tree数据库版

    内容索引:.NET源码,Ajax相关,树形菜单,Tree 一个支持复选框、树形菜单Tree,数据读取自MSSQL2000数据库,最多支持二级,没有尝试可以使用三级。树形菜单设计风格比较不错,所用的相关资源都已打包,部分菜单展开图...

    ASP.NET微商代理商多级分销系统

    1、本系统系采用多层架构+ajax思想... 1、 微配置 微信相关配置 如:2、 代理管理3、 代理级别管理 4、 代理授权管理5、 订单 下级订单管理 物流单等6、 微统计 销售及7、 团队管理 8、图形化的团队代理树形图展示。

    组织机构图控件 Web Control for ASP.NET 2.0 免费版

    组织机构图控件 Web Control for ASP.NET 2.0 动态生成组织机构图或其他树形结构图,并可以操作超链接  组织机构图可以由上至下显示,也可以由左至右显示,通过一个参数选择。 具体请看 Demo

    C#(ASP.NET)相关技术

    网站采用.net 2.0技术 ---------------------------包含内容: ...树形控件 数据导出 数据库备份还原操作 数据相关操作 图片广告 委托与事件 文件操作 站点地图 流水号生成 -------------------详见附件(网站)

    带成绩查询和录取查询的学校网站(asp.net mvc开发)

    一套不错的学校网站管理系统! 可以添加视频、图片、文章,支持多文件上传,最大可以上传2G的单个文件,支持加水印,生成略图;...采用最新的asp.net mvc技术开发,实现代码与界面分离,增加skin(皮肤)非常方便;

    C#DataGridView某列形成树形TreeGridViewRebuilt

    C#DataGridView某列形成树形TreeGridViewRebuilt 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等

    纯ajax sqlserver无限级树形菜单

    纯ajax sqlserver无限级树形菜单. 内还包括表结构和一些基础数据 补充:第一次发布时,忘了图片打包进来. 以下载的朋友可以在这里下载图片 ...

    ASP.NET C#生成下拉列表树实现代码

    效果图: 代码: 代码如下: using System.Data; using System.Web.UI.WebControls... public DropDownListHelp() { // //TODO: 在此处添加构造函数逻辑 // } /// &lt;summary&gt; /// 根据Datatable生成树形下拉菜单 /// &lt;/s

    漂亮的ComponentArtWebUI web界面

    ComponentArt Web.UI专为ASP.NET框架设计,它包含16个支持AJAX技术的优质用户界面控件,并可应用在ASP.NET 1.0, ASP.NET 2.0, ASP.NET AJAX框架中。 2008年3月27日,专注于ASP.NET Web.UI及Charting控件开发的...

    3D柱状图实例

    asp.net实例,使用chartsFree开发的3D柱状图

    漂亮的ComponentArtWebUI及Demo源码(商业版带安装序列号)part2

    ComponentArt Web.UI专为ASP.NET框架设计,它包含16个支持AJAX技术的优质用户界面控件,并可应用在ASP.NET 1.0, ASP.NET 2.0, ASP.NET AJAX框架中。 &lt;br&gt;2008年3月27日,专注于ASP.NET Web.UI及Charting控件开发...

    漂亮的ComponentArtWebUI及Demo源码(商业版带安装序列号)part1

    ComponentArt Web.UI专为ASP.NET框架设计,它包含16个支持AJAX技术的优质用户界面控件,并可应用在ASP.NET 1.0, ASP.NET 2.0, ASP.NET AJAX框架中。 &lt;br&gt;2008年3月27日,专注于ASP.NET Web.UI及Charting控件开发...

    ComponentArtWebUI商业源码

    专为ASP.NET而设计:为三个先进且更强大的框架而设计:ASP.NET 1.0, ASP.NET 2.0和ASP.NET AJAX。 强大的客户端呈现技术:行业中最先进的Web用户界面技术。 ComponentArt Web.UI 包含以下用户界面控件 Calendar...

    Ajax 四级导航菜单ASP+Access动态版

    Asp+Ajax无限级联动下拉框菜单Access版 ASP仿Google输入框提示_自动完成功能 AJAX+ASP多级无限制级联菜单(地市版) ASP下结合AJAX实现输入框提示(自动完成) ASP 树形菜单TreeView 多样式版 jQuery实例_飞飞ajax带...

    c#下拉列表树形菜单,带伸缩节点

    因为randcontrol也是用asp.net ajax 标题不能为空!" Skin="Sunset" Width="250px"&gt; 文章类别: &lt;CollapseAnimation Type="OutQuint" Duration="200"&gt;&lt;/CollapseAnimation&gt; ...

Global site tag (gtag.js) - Google Analytics