陈斌彬的技术博客

Stay foolish,stay hungry

TreeView,TreeNode,TreeNodeCollection

  1. TreeView

TreeView 控件由节点组成。树中的每一项称为一个节点并由 TreeNode 对象表示。包含其他节点的节点称为“父节点”。包含在其他节点中的节点称为“子节点”。没有任何子节点的节点称为“叶节点”。不被任何其他节点包含并且是所有其他节点的上级节点的节点称为“根节点”。一个节点可以同时是父节点和子节点,但是不能同时为根节点、父节点和叶节点。节点为根节点、父节点还是叶节点决定着节点的几种可视化属性和行为属性。

典型的树只有一个根节点,但 TreeView 控件允许您向树结构中添加多个根节点。如果希望在显示项列表的同时不显示单个的主根节点(例如显示产品类别列表),那么此功能将十分有用。

节点主要在两个属性中存储数据:Text 属性和 Value 属性。在 TreeView 控件中显示 Text 属性的值,而 Value 属性用于存储有关节点的所有其他数据,如用于处理回发事件的数据。节点还在 ValuePath 属性中存储从该节点到其根节点的路径。ValuePath 属性指示节点相对于根节点的位置。

  1. TreeNode

TreeNode 对象由以下四个用户界面 (UI) 元素组成,可以自定义或隐藏这些元素:

展开节点指示图标,以表明节点是展开的、折叠的还是不可展开的。

与节点关联的可选复选框。

可选的节点图像。

节点文本。

可以通过设置 TreeView 类的 ExpandImageUrl、CollapseImageUrl 和 NoExpandImageUrl 属性,指定可展开、可折叠和不可展开的节点的自定义图像。通过将 TreeView 类的 ShowExpandCollapse 属性设置为 false,甚至可以完全隐藏展开节点的指示图标。

若要在节点旁显示复选框,请设置 TreeView 类的 ShowCheckBoxes 属性。如果 ShowCheckBoxes 属性设置为 TreeNodeType.Node 以外的一个值,将在指定的节点类型旁显示复选框。通过设置节点的 ShowCheckBox 属性,可以有选择地重写个别节点的复选框。如果显示复选框,可使用 Checked 属性确定复选框是否被选中。

通过设置 ImageUrl 属性可以在节点中显示图像。此图像显示在节点文本旁。

TreeView 控件中的节点文本可以处于两种模式之一:选择模式或导航模式。默认情况下,会有一个节点处于选定状态。若要使一个节点处于导航模式,请将该节点的 NavigateUrl 属性值设置为空字符串 (“”) 以外的值。若要使节点处于选择模式,请将节点的 NavigateUrl 属性设置为空字符串。

默认情况下,单击处于选择模式的节点会将页面回发到服务器并引发 SelectedNodeChanged 事件。也可以选择设置节点的 SelectAction 属性,指定引发其他事件。有关更多信息,请参见 SelectAction。若要确定哪个节点在被单击时处于选择模式,请使用 TreeView 控件的 SelectedNode 属性。

当节点处于导航模式时,禁用该节点的所有选择事件。单击处于导航模式的节点时,用户将被定向到指定的 URL。可以选择设置 Target 属性以指定用来显示链接内容的窗口或框架。

TreeNode 类包含一些用于存储节点状态的属性。可使用 Selected 属性确定节点是否被选定。若要确定节点是否已展开,请使用 Expanded 属性。DataBound 属性用于确定节点是否绑定到数据。当节点绑定到数据时,可以使用 DataItem 属性访问基础数据项。

此类提供了一些属性,有助于确定一个节点相对于树中其他节点的位置。使用 Depth 属性确定节点的深度。使用 ValuePath 属性可以获得从当前节点到其根节点的分隔节点列表。若要确定节点的父节点,请使用 Parent 属性。使用 ChildNodes 集合访问子节点。

有时,静态地预定义树结构并不可行,因为有时数据大小或自定义内容依用户输入而定。因此,TreeView 控件支持动态节点填充。在运行阶段,可以在展开节点时填充该节点。有关动态节点填充的更多信息,请参见 PopulateOnDemand 属性。

有关 TreeNode 的实例的初始属性值列表,请参见 TreeNode 构造函数。

  1. TreeNodeCollection

TreeNodeCollection 类用于存储和管理 TreeView 控件中的 TreeNode 对象的集合。TreeView 控件在其两个属性中使用 TreeNodeCollection 类。在 Nodes 属性中存储其根节点,在 CheckedNodes 属性中存储其选定的节点。TreeNodeCollection 集合也用于 ChildNodes 属性来存储子节点(如果有的话)。

TreeNodeCollection 类支持多种访问集合中的项的方法:

使用 Item 索引器直接在特定的从零开始的索引处检索 TreeNode 对象。

使用 GetEnumerator 方法创建可用于循环访问集合的枚举数。

使用 foreach (C#) 或 For Each (Visual Basic) 循环访问集合。

使用 CopyTo 方法将集合的内容复制到一个 Array 对象中。

可以通过添加和移除 TreeNode 对象以编程方式管理 TreeNodeCollection。若要在集合中添加节点,请使用 Add 或 AddAt 方法。若要从集合中移除节点,请使用 Remove、RemoveAt 或 Clear 方法。

  1. Sample

自动化测试情况下:

先实例化treeview,然后

TreeNodeCollection treeNodeCollection = treeView.Nodes;

foreach(TreeNode treeNode in treeNodeCollection)

{

treeNode.select();

if(treeNode.text == "abcd")

{

Console.WriteLine("The node 'abcd' is found.");

具体处理;

break;

}

}

Resource Reference