最近在論壇上回答了一些關(guān)于客戶端操作TreeView節(jié)點選中的問題,在網(wǎng)友提供的代碼基礎(chǔ)上做了兩個例子。可惜原貼已經(jīng)丟失了,整理一下寫成文檔吧 為了書寫方便,這兩個例子沒有采用codebehind方式,復制即可運行
第一個例子是當取消或選中節(jié)點選中狀態(tài)時,子節(jié)點也做相應的取消或選中變化 需要注意的是如果要初始設(shè)置TreeNode為選中狀態(tài),只能在客戶端設(shè)置。如果在服務器端設(shè)置TreeNode為選中狀態(tài),則在客戶端使用getAttribute("Checked"),得到的值永遠是true。
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %> <HTML> <HEAD> <script language="C#" runat="server"> private void Page_Load(object sender, System.EventArgs e) { TreeView1.Attributes.Add("oncheck","tree_oncheck(this)"); } </script> <script language="javascript"> <!-- //初始化選中節(jié)點 function initchecknode() { var node=TreeView1.getTreeNode("1"); node.setAttribute("Checked","true"); setcheck(node,"true"); FindCheckedFromNode(TreeView1); } //oncheck事件 function tree_oncheck(tree) { var node=tree.getTreeNode(tree.clickedNodeIndex); var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked"); setcheck(node,Pchecked); document.all.checked.value=""; document.all.unchecked.value=""; FindCheckedFromNode(TreeView1); } //設(shè)置子節(jié)點選中 function setcheck(node,Pc) { var i; var ChildNode=new Array(); ChildNode=node.getChildren(); if(parseInt(ChildNode.length)==0) return; else { for(i=0;i<ChildNode.length;i++) { var cNode; cNode=ChildNode[i]; if(parseInt(cNode.getChildren().length)!=0) setcheck(cNode,Pc); cNode.setAttribute("Checked",Pc); } } } //獲取所有節(jié)點狀態(tài) function FindCheckedFromNode(node) { var i = 0; var nodes = new Array(); nodes = node.getChildren(); for (i = 0; i < nodes.length; i++) { var cNode; cNode=nodes[i]; if (cNode.getAttribute("Checked")) AddChecked(cNode); else AddUnChecked(cNode); if (parseInt(cNode.getChildren().length) != 0 ) { FindCheckedFromNode(cNode); } } } //添加選中節(jié)點 function AddChecked(node) { document.all.checked.value += node.getAttribute("NodeData"); document.all.checked.value += ','; } //添加未選中節(jié)點 function AddUnChecked(node) { document.all.unchecked.value += node.getAttribute("NodeData"); document.all.unchecked.value += ','; } //--> </script> </HEAD> <body onload="initchecknode()"> <iewc:TreeView id="TreeView1" runat="server" ExpandLevel="5"> <iewc:TreeNode NodeData="0" CheckBox="True" Text="Node0" Expanded="True"> <iewc:TreeNode NodeData="1" CheckBox="True" Text="Node1" Expanded="True"></iewc:TreeNode> <iewc:TreeNode NodeData="2" CheckBox="True" Text="Node2" Expanded="True"> <iewc:TreeNode NodeData="3" CheckBox="True" Text="Node3" Expanded="True"> <iewc:TreeNode NodeData="4" CheckBox="True" Text="Node4"
Expanded="True"></iewc:TreeNode> </iewc:TreeNode> </iewc:TreeNode> </iewc:TreeNode> <iewc:TreeNode NodeData="5" CheckBox="True" Text="Node5" Expanded="True"> <iewc:TreeNode NodeData="6" CheckBox="True" Text="Node6" Expanded="True"></iewc:TreeNode> </iewc:TreeNode> <iewc:TreeNode NodeData="7" CheckBox="True" Text="Node7" Expanded="True"> <iewc:TreeNode NodeData="8" CheckBox="True" Text="Node8" Expanded="True"> <iewc:TreeNode NodeData="9" CheckBox="True" Text="Node9"
Expanded="True"></iewc:TreeNode> </iewc:TreeNode> </iewc:TreeNode> </iewc:TreeView><P> <TABLE id="Table1" cellSpacing="1" cellPadding="1" width="300" border="1"> <TR> <TD> <asp:Label id="Label1" runat="server">checked</asp:Label></TD> <TD> <INPUT id="checked" type="text" size="32"></TD> </TR> <TR> <TD> <asp:Label id="Label2" runat="server">unchecked</asp:Label></TD> <TD><INPUT id="unchecked" type="text" size="32"></TD> </TR> </TABLE> <br> </P> </body> </HTML>
第二個例子是關(guān)于如何在服務器端得到客戶端設(shè)置后的節(jié)點選中狀態(tài)
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls,
Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %> <HTML> <HEAD> <script language="C#" runat="server"> private void Button1_Click(object sender, System.EventArgs e) { Response.Write(TreeView1.Nodes[0].Checked); } </script> <script language="javascript"> function set_check() { var nodeindex = "0"; var node=TreeView1.getTreeNode(nodeindex); node.setAttribute("Checked","True"); TreeView1.queueEvent('oncheck', nodeindex); } </script> </HEAD> <body> <form id="TestTree" method="post" runat="server"> <iewc:TreeView id="TreeView1" runat="server"> <iewc:TreeNode CheckBox="True" Text="Node0"></iewc:TreeNode> </iewc:TreeView> <br> <input type="button" value="set check" onclick="set_check()"> <br> <asp:Button id="Button1" runat="server" Text="submit" OnClick="Button1_Click"></asp:Button> </form> </body> </HTML>
|