tree控件用法,最好有例子。

BigBlue 2004-03-31 11:16:18
还有问题:

TREE的背景透明设置方法;

弹开时不有时就死掉了一样,所有链接都无效了,怎么解决?
...全文
80 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jpyc 2004-04-07
  • 打赏
  • 举报
回复
总结了一下用MS的TREE控件的心得,大家一起来分享,当然,也不乏有其他网友的一些好的见解被录入其中,另有遗漏处请大家不吝赐教!

相信只要你仔细阅读了这篇小菜文,并参考一下提供的例程,一定能够掌握TREE的基本用法!

1.工欲善其事,必先利其器。首先保证装好你的组件,这个包安装非常方便,只要运行一下即可在VS.NET的工具栏中找到并使用了:
http://218.56.11.178:8018/FileDown.aspx?FID=4
也可以关注一下官方站是否有新版发布:
http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp

2.常用的几个属性和方法
~Index 获取树节点在树节点集合中的位置。
~Nodes 获取分配给树视图控件的树节点集合。
~Parent 获取或设置控件的父容器。
~SelectedNode 获取或设置当前在树视图控件中选定的树节点。
~ExpandAll 展开所有树节点。
~Checked 获取或设置一个值,用以指示树节点是否处于选中状态。
~Text 获取或设置在树节点标签中显示的文本。
~Expand 展开树节点。
~Clear 清空树
~Remove 从树视图控件中移除当前树节点。
以上由其他网友总结,补充:
~Height 控件的高度
~Width 控件的宽度
~BackColor 背景颜色
~BorderColor 边框颜色
~BorderStyle 边框样式
~BorderWidth 边框宽度
~CssClass 应用于该控件的CSS类名
~ExpandedImageUrl 展开时显示的节点图标
~ImageUrl 未选择或展开是显示的节点图标
~SelectedImageUrl 选中状态下显示的节点图标
~Indent 缩进距离,只有在ShowLines设为TRUE时才生效。
~ShowLines 是否显示层级连接线
~ShowPlus 是否显示+/-符号按钮
~ShowToolTip 在有父节点上显示工具提示(+/-号的使用展开/关闭)。
~AccseeKey 控件使用的键盘快捷键
~AutoSelect 为TRUE时,当用键盘移动节点时,自动选择新节点
~AutoPostBack 当改变状态时,自动回存
~Enabled 控制控件的启用状态
~EnableViewState 控件是否自动保存其状态以用于往返行程
~ExpandLevel 初始化控件是展开节点的层数
~SelectExpands 当选中一个接点时,是否自动展开该节点
~TabIndex TAB键次序
~Visible 控件是否可见

3.实用技巧:
1)怎样点击文字(不是+/-号)即可展开(收缩)子节点
将TREE的ShowToolTip 属性设为false即可。

2)当鼠标指到某父接点时,如何不显示显示“节点名:user +/- to expand/collapse”
将TREE的SelectExpands 属性设为TRUE即可。

3)不显示树型的问题
首先:控件包没装好,使用上边介绍的控件包装一下试试。
其次:TreeView要求客户端浏览器版本为IE5.5及以上,最好要求客户端升级为IE6.0

4)关于闪烁
将AutoPostBack属性设置为真,SelectedIndexChange才能被执行。不过这样的话刷新的很厉害。不要刷新的话,将AutoPostBack属性设置为FALSE.

5)如何实现用键盘上下左右键移动焦点时,自动选择新节点并执行新节点
将TREE的AutoSelect 属性设为TRUE即可。

6)不想显示+/-符号按钮怎么做?
将TREE的ShowPlus 属性设为False即可。

7)不想显示层级连接线怎么做?
将TREE的ShowLines 属性设为False即可。

8)如何设置节点旁的图标
~ExpandedImageUrl、ImageUrl、SelectedImageUrl这3个属性是控制图标的,选择自己喜欢的就OK了。

4.看看这个例子,对你一定有启发,是一棵无级树,不过在实际使用中可能会有些麻烦:
http://218.56.11.178:8018/FileDown.aspx?FID=246

5.这个论坛也使用了树(asp.net+C#+MSSQL 2000),并且代码开放,,如果觉得有参考价值,不妨装起来看看,其中还包含了其他一些常用的asp.net编程技巧,演示了TREE控件如何和数据库结合,动态显示库中的数据,这棵树只有两层,不过比较实用:
http://218.56.11.178:8018/FileDown.aspx?FID=212
其中:tree.aspx、tree.aspx.cs是TREE控件使用的主要部分。

论坛的实际应用演示地址,在这里:
http://expert.kaer.cn/
adayu2000 2004-03-31
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2887/2887346.xml?temp=.4831354
http://expert.csdn.net/Expert/topic/2904/2904756.xml?temp=.8235895
terryxin 2004-03-31
  • 打赏
  • 举报
回复
已经很详细了
herony420 2004-03-31
  • 打赏
  • 举报
回复
'########################### 程守华 2003,7
'########################### 专门用于处理部门和人员的树形创建
'########################### 以及其他一些关于树的处理

Imports Microsoft.Web.UI.WebControls
Imports System.Data.SqlClient

Public Class TreeOper
'找到后记录index值
Dim sFindIndex As String

'要查找的两个条件
Dim intFindID As Integer
Dim sFindNodeData As String

'找到标志
Dim bFind As Boolean

Dim strConn As String
Dim ds As New DataSet()

'根据某个节点的index值,让其变成选中节点,返回true表示index可以在tv中找到,返回false表示index值不在tv中
Public Function bMakeNodeSelected(ByVal tv As TreeView, ByVal ID As Integer, ByVal NodeData As String) As Boolean
Dim index As String

index = GetIndexFromIDandNodedata(tv, ID, NodeData)

If index = "" Then
bMakeNodeSelected = False
Exit Function
End If

Dim sTempIndex As String
Dim lastpos As Integer

sTempIndex = index

lastpos = sTempIndex.LastIndexOf(".")
Do While lastpos <> -1
tv.GetNodeFromIndex(sTempIndex).Expanded = True

sTempIndex = Left(sTempIndex, lastpos)
lastpos = sTempIndex.LastIndexOf(".")
Loop
tv.GetNodeFromIndex(sTempIndex).Expanded = True

'被选中的节点
tv.SelectedNodeIndex = index

bMakeNodeSelected = True
End Function

'调用此函数要注意:
' 因为ds是全局变量,所以不能用同一个对象创建两棵树,必须为每棵树创建一个该类的对象。
'Public Sub CreateTree(ByVal tv As TreeView, ByVal OrgID As Integer, ByVal bLoadPerson As Boolean)
' '建立DataSet信息
' strConn = ConfigurationSettings.AppSettings("strConn")

' CreateDataSet(bLoadPerson)

' LoadTreeRoot(tv, OrgID, bLoadPerson)
' LoadTreeLeaves(tv.Nodes(0).Nodes, OrgID, bLoadPerson)
'End Sub

'*************************************************************************************************************************************
'#################################### Private Procedures #############################################################################
'*************************************************************************************************************************************
'根据ID和NodeData共同确定唯一的一个节点,得到他的index值
Private Function GetIndexFromIDandNodedata(ByVal tv As TreeView, ByVal ID As Integer, ByVal NodeData As String) As String
bFind = False
sFindIndex = ""
intFindID = ID
sFindNodeData = NodeData

RecurseTree(tv.Nodes)

GetIndexFromIDandNodedata = sFindIndex
End Function

Private Sub RecurseTree(ByVal ParentNode As TreeNodeCollection)
Dim node As TreeNode

For Each node In ParentNode
If bFind = True Then Exit Sub

If node.ID = intFindID And node.NodeData = sFindNodeData Then
bFind = True
sFindIndex = node.GetNodeIndex
Else
RecurseTree(node.Nodes)
End If
Next
End Sub

Private Sub CreateDataSet(ByVal bLoadPerson As Boolean) '在数据库中读出树形结构,填充到dataset中
Dim objConn As New SqlConnection(strConn)
objConn.Open()

Dim objCmd As New SqlDataAdapter("select * from Org", objConn)
objCmd.Fill(ds, "Org")

If bLoadPerson Then
objCmd.SelectCommand.CommandText = "select * from Person"
objCmd.Fill(ds, "Person")
End If

objCmd.Dispose()
objConn.Close()
End Sub

'Private Sub LoadTreeRoot(ByVal tv As TreeView, ByVal OrgID As Integer, ByVal bLoadPerson As Boolean)
' Dim dboper As New DataOper()
' Dim sRootName As String
' Dim tnRoot As New TreeNode()

' '登陆人所属部门的节点加载(作为根节点)
' tnRoot.ID = OrgID
' tnRoot.Text = dboper.GetValueFromID(OrgID, "Org", "Name")
' tnRoot.NodeData = "1"

' tv.Nodes.Add(tnRoot)

' '加载该部门下的人员
' If bLoadPerson = True Then
' LoadPersonToOrg(tnRoot)
' End If
'End Sub

Private Sub LoadTreeLeaves(ByRef Nds As TreeNodeCollection, ByVal ParentID As Integer, ByVal bLoadPerson As Boolean)
Dim dvOrg As New DataView()
Dim drvOrg As DataRowView
Dim tmpOrgNd As TreeNode
Dim intId As Integer

dvOrg.Table = ds.Tables("Org")
dvOrg.RowFilter = "ParentID = " & ParentID

For Each drvOrg In dvOrg

'下面处理子部门
tmpOrgNd = New TreeNode()

intId = drvOrg("ID")
tmpOrgNd.ID = intId
tmpOrgNd.NodeData = "1"
tmpOrgNd.Text = drvOrg("Name")
tmpOrgNd.ImageUrl = "Images/Org.gif"
Nds.Add(tmpOrgNd)

If bLoadPerson = True Then '如果该部门下面有人员的话,在此处加入目录树中
LoadPersonToOrg(tmpOrgNd)
End If

LoadTreeLeaves(tmpOrgNd.Nodes, intId, bLoadPerson) '加载子叶子
Next
End Sub

'如果该部门下面有人员的话,在此处加入目录树中
Private Sub LoadPersonToOrg(ByVal tnOrg As TreeNode)
Dim dvPerson As New DataView()
Dim drvPerson As DataRowView
Dim tmpPersonNd As TreeNode

dvPerson.Table = ds.Tables("Person")
dvPerson.RowFilter = "OrgID = " & tnOrg.ID
For Each drvPerson In dvPerson
tmpPersonNd = New TreeNode()

tmpPersonNd.ID = drvPerson("ID")
tmpPersonNd.NodeData = "0"
tmpPersonNd.Text = drvPerson("RealName")
tmpPersonNd.ImageUrl = "Images/Person.gif"
tnOrg.Nodes.Add(tmpPersonNd)
Next
End Sub

'用一句函数调用来完成一个节点的创造,主要是节省时间。
Public Function AddNode(ByRef ParentNodeCollection As TreeNodeCollection, ByVal Text As String, Optional ByVal Target As String = "", Optional ByVal NavigateUrl As String = "", Optional ByVal ImageUrl As String = "", Optional ByVal NodeData As String = "") As TreeNode
Dim tnTemp As TreeNode

tnTemp = New TreeNode

tnTemp.ID = Text
tnTemp.Text = Text
tnTemp.Target = Target
tnTemp.NodeData = NodeData
tnTemp.NavigateUrl = NavigateUrl
tnTemp.ImageUrl = ImageUrl

ParentNodeCollection.Add(tnTemp)

AddNode = tnTemp
End Function

End Class

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧