`

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实现的树形管理界面

    在Asp.net开发中,构建一个树形管理界面可以极大地提升用户体验,特别是在处理层次结构数据时,如组织架构、文件目录等。这个实用模块利用Asp.net的技术特性,实现了对zip文件的上传和下载功能,使得用户能够在网页...

    asp.net树形控件

    在WebSite3项目中,你可以找到关于如何实现和使用ASP.NET树形控件的示例代码和配置文件。通过分析这些文件,你可以学习如何将树形控件整合到自己的ASP.NET应用程序中,实现添加、删除和修改节点的功能,以及个性化其...

    asp.net树形结构

    ASP.NET树形结构是Web应用程序中常用的一种数据展示方式,它能够以层级化的形式呈现信息,比如网站导航、文件系统目录、组织结构等。在ASP.NET中,我们通常使用两种控件来创建和操作树形结构:Menu控件和TreeView...

    asp.net 目录树

    在ASP.NET中,目录树(Directory Tree)是一种常见的用户界面元素,它以树形结构显示文件系统或数据库中的目录和文件。这种结构便于用户浏览和导航层级关系,尤其是在处理大量组织有序的数据时。本篇文章将深入探讨...

    ASP.NET树控件维护完美版

    本资源提供的"ASP.NET树控件维护完美版"应该是一个经过优化和更新的版本,旨在解决开发者在实际使用过程中遇到的问题,提供更加稳定、高效和功能丰富的树形控件解决方案。 首先,让我们了解一下ASP.NET中的树控件...

    .net树形动态菜单(数据库)

    总之,.NET树形动态菜单(数据库)是一个实用的开发资源,它演示了如何结合ASP.NET和数据库技术来创建动态的、数据驱动的用户界面。掌握这一技术对于提升ASP.NET Web应用的用户体验和功能具有重要意义。

    ASP.NET动态树参考

    在这个"ASP.NET动态树参考"中,我们可以深入理解如何在ASP.NET环境中创建和管理动态生成的树形结构。 首先,动态树的核心在于它的动态性,这意味着树的节点不是在页面加载时预先定义好的,而是根据服务器端的数据在...

    asp.net 绘制柱状图和饼状图 生成树

    在ASP.NET中,通常使用递归的方式来构建树形结构,因为树可能有任意深度的子节点。递归函数会遍历每个节点,并根据需要调用自身来处理子节点。在Web应用中,这可以通过服务器控件如TreeView或者自定义控件来实现,...

    ASP.NET【鲜花销售系统】

    在这个鲜花销售系统中,开发者可能利用ASP.NET的页面生命周期和事件处理机制来实现用户交互。 2. **购物车功能**:购物车是电商系统的核心组成部分。在ASP.NET中,可以通过Session或Cookie来存储用户选择的商品信息...

    asp.net 生成动态树

    在提供的压缩包文件"TREE"中,可能包含了一些示例代码、配置文件或文档,这些资源可以帮助你更深入地理解和应用`xLoadTree`,以便在自己的项目中实现动态树的功能。请仔细研究这些文件,以获取关于`xLoadTree`的实际...

    支持节点拖放、增加、删除的web树,强大功能,包含asp.net树控件和实例

    本文将深入探讨标题为“支持节点拖放、增加、删除的web树,强大功能,包含asp.net树控件和实例”的主题,以及描述中提及的“astreeview最新版”这一优秀ASP.NET树控件。 首先,让我们来了解一下ASTreeView控件。...

    (asp.net)Jquery动态树状图

    在ASP.NET环境中构建一个JQuery动态树状图是一种常见的需求,尤其在数据层级展示或导航菜单设计时。本文将深入探讨如何使用asp.net、jQuery和SQL Server 2008来实现这一功能。 首先,我们需要了解JQuery的核心概念...

    基于递归算法和树形控件的动态树形图的实现

    本文探讨了如何使用递归算法和树形控件(TreeView)在ASP.NET环境中实现动态树形图。TreeView是微软为帮助开发者更好地在Web应用中组织和展示分层数据而提供的一个强大工具。通过分析TreeView的安装过程和创建静态树...

    asp.net(C#)无限极树实例

    在ASP.NET中,我们可以使用`TreeView`控件来创建树形结构。这个控件允许我们通过编程方式或通过数据绑定来添加节点。在HTML中,`&lt;asp:TreeView&gt;`标签用于定义这个控件。 3. **C#编程** C#代码主要用于处理后台...

    [ASP.NET(C#)] - 利用递归遍历文件夹和文件存入TreeView

    TreeView 控件可以以树形结构展示文件夹和文件的关系,方便用户浏览和下载文件。 二、递归遍历文件夹和文件 为了将文件夹和文件存入 TreeView 中,我们需要使用递归遍历文件夹和文件。递归遍历的过程是指从某个...

    ASP.NET 站点地图向网站添加站点导航

    2. `TreeView`控件:这个控件可以将站点地图数据呈现为一个可折叠/展开的树形视图。通过设置`SiteMapDataSource`作为数据源,我们可以将站点地图与`TreeView`关联起来,使其自动填充导航结构。 为了在母版页中添加...

    C# ASP.NET TreeView click 事件

    在ASP.NET开发中,TreeView控件是一个非常有用的组件,它用于呈现层次结构的数据,比如文件系统、组织结构或任何其他可以表示为树形结构的数据。本文将深入探讨如何在C#环境中自定义处理ASP.NET TreeView控件的点击...

    ASP.NET源码——GridView+Jquery实现的TreeGrid.zip

    在本示例中,"ASP.NET源码——GridView+Jquery实现的TreeGrid.zip" 提供了一个使用ASP.NET和jQuery的实现树形网格视图(TreeGrid)的源代码示例。这个TreeGrid是将数据以层次结构展示,类似于文件系统中的目录结构,...

    C# ASP.NET 模块 - 图片资源管理模块

    在C# ASP.NET中,可以利用递归方法遍历文件系统或数据库中的目录结构,将图片文件按照它们所在的文件夹生成一个层次分明的树形视图。递归遍历涉及到的知识点包括文件系统API的使用、递归算法的实现以及ASP.NET控件...

Global site tag (gtag.js) - Google Analytics