动态建立TreeView节点
TreeView经常用来表现复杂的层级式数据结构,因此不同于静态菜单。我们通常是通过程序动态将数据传输给TreeView以建立其节点的,并且通过取得节点的关联值,执行某些特定的动作。建立节点的语法必须根据节点标签进行引用,假设你在网页上建立了一个TreeView控件,并且将其命名为TreeView1,在其中加入单一节点的程序代码如下:
TreeNode nodeVBNet = new TreeNode("Visual Basic.NET"); tvFB.Nodes.Add(nodeVBNet); | 你还可以利用另外一个版本的方法,将其加入到指定的位置中,而所要加入的位置是由以0为起始值的索引值指定的,如下式。这段程序代码将一个名称为"Visual C# 2005"的节点如入到群组里面的第2个节点的位置。
TreeNode nodecs = new TreeNode("Visual C# 2005"); tvFB.Nodes.AddAt(1, nodecs); | 如果你想要进一步将指定的节点加到某个节点成为其下的子节点,例如,为上述的"Visual Basic.NET"加入一个"My对象"子节点,所需的程序代码如下:
TreeNode nodeMy = new TreeNode("My 对象探索"); nodeVBNet.ChildNodes.Add(nodeMy); |
nodeVBNet是上面建立的节点,我们要将nodeMy加入到其子节点的位置,可以引用ChildNodes集合的Add方法实现。为了了解如何通过程序代码建立TreeView节点,现在我们通过示例进行说明。
示例FBTreeView
先来看看这个示例所呈现的结果,在浏览器中载入网页,如下图所示,随意选择任何一个节点,网页的TreeView上便出现所选择的节点名称。
|
|
建立一个新网站,拖曳一个TreeView控件到Default网页中,切换到程序代码文件,输入以下的内容:
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { TreeNode nodeVBNet = new TreeNode("Visual Basic.NET"); TreeNode nodeMy = new TreeNode("My对象"); TreeNode nodeVBs = new TreeNode("VB6升级"); TreeNode nodecs = new TreeNode("C#"); TreeNode nodel = new TreeNode("基础语法"); TreeNode nodeoop = new TreeNode("OOP设计"); TreeNode nodeThread = new TreeNode("多线程"); TreeNode nodeNET = new TreeNode("NET"); TreeNode nodeNET2 = new TreeNode("NET 2.0"); TreeNode nodeNET3 = new TreeNode("NET 3.0"); TreeNode nodeCLR = new TreeNode("CLR"); TreeNode nodeASPNET = new TreeNode("ASP.NET"); TreeNode nodeControl = new TreeNode("控件"); TreeNode nodeDataBind = new TreeNode("数据绑定"); TreeNode nodeP = new TreeNode("个性化网页"); TreeNode nodeADONET = new TreeNode("ADO.NET"); TreeNode nodeCONN = new TreeNode("联机设置"); TreeNode nodeDataSource = new TreeNode("DataSource"); if (!IsPostBack) { tvFB.Nodes.Add(nodeNET); tvFB.Nodes.Add(nodeVBNet); tvFB.Nodes.Add(nodecs); tvFB.Nodes.Add(nodeASPNET); tvFB.Nodes.Add(nodeADONET); //VB.NET nodeVBNet.ChildNodes.Add(nodeMy); nodeVBNet.ChildNodes.Add(nodeVBs); //C# nodecs.ChildNodes.Add(nodel); nodecs.ChildNodes.Add(nodeoop); nodecs.ChildNodes.Add(nodeThread); //NET nodeNET.ChildNodes.Add(nodeNET2); nodeNET.ChildNodes.Add(nodeNET3); nodeNET.ChildNodes.Add(nodeCLR); //ASP.NET nodeASPNET.ChildNodes.Add(nodeControl); nodeASPNET.ChildNodes.Add(nodeDataBind); nodeASPNET.ChildNodes.Add(nodeP); //ADO.NET nodeADONET.ChildNodes.Add(nodeCONN); nodeADONET.ChildNodes.Add(nodeDataSource);
} } } |
这段程序代码建立了5个根节点,然后通过ChildNodes一一为其加入子节点。读者可以自行与上述通过标签形式加入节点的网页内容进行比对。
除了建立节点,另外一个使用TreeView控件必须了解的技巧是取得用户所选择的节点。用户选择节点,触发SelectedNodeChanged事件来执行某些特定的程序功能,开发人员则在此事件处理程序里,编写相关的程序代码。将一个标签拖曳到网页上,并且双击Selected- NodeChanged事件产生事件,处理程序的相关程序代码,如下图所示。
现在在事件处理程序里面,填入下面的程序代码,当用户单击某一个节点的时候,这段程序代码被触发,取得节点的值,并将其显示在网页上配置的标签控件中。
protected void tvFB_SelectedNodeChanged(object sender, EventArgs e) } lblClick.Text = tvFB.SelectedValue; } | 从这个示例中,我们看到了如何用后置程序代码动态建立所需的TreeView节点。当这些节点必须从数据库等外部数据源取得时,这种技巧非常有用,可以让我们摆脱静态数据的限制,建立更弹性的TreeView架构。
|