知识大全 ASP.NET中树形图的实现
Posted 知
篇首语:读书不要贪多,而是要多加思索,这样的读书使我获益不少。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET中树形图的实现相关的知识,希望对你有一定的参考价值。
ASP.NET中树形图的实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
树形图用于显示按照树形结构进行组织的数据 其用途比较广泛 如计算机中的文件系统(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中 要到微软的站点上下载 下载地址是 //msdn microsoft /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(TreeView Nodes ) 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 ) Nodes intId) Next End Sub 二 增加 删除树节点
单纯在Treeview 上增加 删除 修改节点只需用Nodes属性的Add Remove 等方法即可 值得注意的地方是VS NET中Treeview的Nodes集合与VS 中的区别 VS 中的是一个大的集合 而VS NET中的是分层的每个Node下都有Nodes属性 增加 删除 修改树节点时与VS 相比有很大差别 特别是删除时
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 = TreeView GetNodeFromIndex(TreeView 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 = TreeView SelectedNodeIndex() GetNdCol(idx) Remove(TreeView GetNodeFromIndex(idx)) Dim dv As New DataView() recNo As Integer dv Table = ds Tables( tree ) dv RowFilter= NODEID= & NdId dv Delete( ) 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 = Then tmpNds = TreeView Nodes Else tmpNds = TreeView Nodes(CInt(idxs( ))) Nodes For i = To cnt tmpNds = tmpNds(CInt(idxs(i))) Nodes Next End If Return tmpNds End Function 三 修改 移动树节点
由于服务器控件不支持鼠标拖动事件 所以不能象Windows程序那样通过拖动移动节点 这里是通过选择父节点的方式 移动是通过在原位置删除 新位置添加实现的 要注意在删除时先保存节点信息
Private Sub TreeView _SelectedIndexChange(ByVal sender As Object ByVal e As Microsoft Web UI WebControls TreeViewSelectEventArgs) Handles TreeView 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( )( NODE_DESCRIPT ) = Me TextBox Text dv( )( ADDRESS ) = Me TextBox Text dv( )( TARGET ) = Me TextBox Text dv( )( ICON ) = Me TextBox Text If dv( )( PARENTID ) ToString <> Me DropDownList SelectedItem Value Then 移动节点 dv( )( PARENT_NAME ) = Me DropDownList SelectedItem Value If Me DropDownList SelectedItem Value = ROOT Then tmpNds = TreeView Nodes Else tmpNds = FromIdToNode(Me DropDownList SelectedItem Value TreeView Nodes) Nodes 新的父节点的Nodes集合 End If GetNdCol(e OldNode) Remove(tmpNd) tmpNds Add(tmpNd) End If tmpNd Text = Me TextBox Text tmpNd ImageUrl = Me TextBox Text tmpNd = TreeView GetNodeFromIndex(TreeView SelectedNodeIndex) dv RowFilter= NODEID= & tmpNd ID Me TextBox Text = dv( )( NODENAME ) ToString Me TextBox Text = dv( )( ADDRESS ) ToString Me TextBox Text = dv( )( TARGET ) ToString Me TextBox Text = dv( )( 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 tmpNd As TreeNode For Each tmpNd In Nds If tmpNd ID = ID Then Return tmpNd Exit Function End If tmpNd = FromIdToNode(ID tmpNd Nodes) If Not (tmpNd Is Nothing) Then Return tmpNd Exit Function End If Next Return Nothing End Function
四 结束语
cha138/Article/program/net/201311/15457相关参考
ASP.NET中GUID 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! GUID(Globalu
在ASP.NET中动态生成图形 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! NET有一个很灵巧
ASP.NET中App 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Bin文件夹 Bin文件夹包
ASP.NET中DataTable对象 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! DataT
ASP.NET中在线用户统计 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 统计在线用户的作用不
小技巧:ASP.NET中编程杀死进程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 通过ASPN
Asp.Net中使用水晶报表 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以下内容为程序代码:
ASP.NET中异常处理使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 通用语言运行时(CL
浅析ASP.NET编程中十大技巧 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在本篇文件中我们
ASP.NET中如何使用匿名函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 尝试从缓存中获取