動(dòng)態(tài)建立TreeView節(jié)點(diǎn)
TreeView經(jīng)常用來表現(xiàn)復(fù)雜的層級(jí)式數(shù)據(jù)結(jié)構(gòu),因此不同于靜態(tài)菜單。我們通常是通過程序動(dòng)態(tài)將數(shù)據(jù)傳輸給TreeView以建立其節(jié)點(diǎn)的,并且通過取得節(jié)點(diǎn)的關(guān)聯(lián)值,執(zhí)行某些特定的動(dòng)作。建立節(jié)點(diǎn)的語法必須根據(jù)節(jié)點(diǎn)標(biāo)簽進(jìn)行引用,假設(shè)你在網(wǎng)頁上建立了一個(gè)TreeView控件,并且將其命名為TreeView1,在其中加入單一節(jié)點(diǎn)的程序代碼如下:
TreeNode nodeVBNet = new TreeNode("Visual Basic.NET"); tvFB.Nodes.Add(nodeVBNet); | 你還可以利用另外一個(gè)版本的方法,將其加入到指定的位置中,而所要加入的位置是由以0為起始值的索引值指定的,如下式。這段程序代碼將一個(gè)名稱為"Visual C# 2005"的節(jié)點(diǎn)如入到群組里面的第2個(gè)節(jié)點(diǎn)的位置。
TreeNode nodecs = new TreeNode("Visual C# 2005"); tvFB.Nodes.AddAt(1, nodecs); | 如果你想要進(jìn)一步將指定的節(jié)點(diǎn)加到某個(gè)節(jié)點(diǎn)成為其下的子節(jié)點(diǎn),例如,為上述的"Visual Basic.NET"加入一個(gè)"My對(duì)象"子節(jié)點(diǎn),所需的程序代碼如下:
TreeNode nodeMy = new TreeNode("My 對(duì)象探索"); nodeVBNet.ChildNodes.Add(nodeMy); |
nodeVBNet是上面建立的節(jié)點(diǎn),我們要將nodeMy加入到其子節(jié)點(diǎn)的位置,可以引用ChildNodes集合的Add方法實(shí)現(xiàn)。為了了解如何通過程序代碼建立TreeView節(jié)點(diǎn),現(xiàn)在我們通過示例進(jìn)行說明。
示例FBTreeView
先來看看這個(gè)示例所呈現(xiàn)的結(jié)果,在瀏覽器中載入網(wǎng)頁,如下圖所示,隨意選擇任何一個(gè)節(jié)點(diǎn),網(wǎng)頁的TreeView上便出現(xiàn)所選擇的節(jié)點(diǎn)名稱。
|
|
建立一個(gè)新網(wǎng)站,拖曳一個(gè)TreeView控件到Default網(wǎng)頁中,切換到程序代碼文件,輸入以下的內(nèi)容:
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對(duì)象"); TreeNode nodeVBs = new TreeNode("VB6升級(jí)"); TreeNode nodecs = new TreeNode("C#"); TreeNode nodel = new TreeNode("基礎(chǔ)語法"); TreeNode nodeoop = new TreeNode("OOP設(shè)計(jì)"); 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("數(shù)據(jù)綁定"); TreeNode nodeP = new TreeNode("個(gè)性化網(wǎng)頁"); TreeNode nodeADONET = new TreeNode("ADO.NET"); TreeNode nodeCONN = new TreeNode("聯(lián)機(jī)設(shè)置"); 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個(gè)根節(jié)點(diǎn),然后通過ChildNodes一一為其加入子節(jié)點(diǎn)。讀者可以自行與上述通過標(biāo)簽形式加入節(jié)點(diǎn)的網(wǎng)頁內(nèi)容進(jìn)行比對(duì)。
除了建立節(jié)點(diǎn),另外一個(gè)使用TreeView控件必須了解的技巧是取得用戶所選擇的節(jié)點(diǎn)。用戶選擇節(jié)點(diǎn),觸發(fā)SelectedNodeChanged事件來執(zhí)行某些特定的程序功能,開發(fā)人員則在此事件處理程序里,編寫相關(guān)的程序代碼。將一個(gè)標(biāo)簽拖曳到網(wǎng)頁上,并且雙擊Selected- NodeChanged事件產(chǎn)生事件,處理程序的相關(guān)程序代碼,如下圖所示。
現(xiàn)在在事件處理程序里面,填入下面的程序代碼,當(dāng)用戶單擊某一個(gè)節(jié)點(diǎn)的時(shí)候,這段程序代碼被觸發(fā),取得節(jié)點(diǎn)的值,并將其顯示在網(wǎng)頁上配置的標(biāo)簽控件中。
protected void tvFB_SelectedNodeChanged(object sender, EventArgs e) } lblClick.Text = tvFB.SelectedValue; } | 從這個(gè)示例中,我們看到了如何用后置程序代碼動(dòng)態(tài)建立所需的TreeView節(jié)點(diǎn)。當(dāng)這些節(jié)點(diǎn)必須從數(shù)據(jù)庫等外部數(shù)據(jù)源取得時(shí),這種技巧非常有用,可以讓我們擺脫靜態(tài)數(shù)據(jù)的限制,建立更彈性的TreeView架構(gòu)。
|