ASP.NET中树形图的实现
点击次数:14 次 发布日期:2008-11-26 09:50:49 作者:源代码网
|
源代码网推荐 源代码网推荐 本文介绍用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下调试通过。 源代码网推荐 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
