天天看點

asp.net 樹形目錄

asp.net 樹形目錄

關鍵詞: TreeView                                          

TreeView使用集錦     選擇自 hgknight 的 Blog 

關鍵字   TreeView

出處   

 原來在論壇裡發過專題文章,隻是由于文章丢失原因,有些問題找不到了,同時這次也補充了一些,發到文檔區以友善查詢吧

原貼

http://expert.csdn.net/Expert/topic/1525/1525202.xml

1.下載下傳位址

http://msdn.microsoft.com/downloads/samples/internet/ASP_DOT_NET_ServerControls/WebControls/default.asp

下載下傳後是字尾為bat的版本

(1)bulid.将bulid.bat的路徑指向csc.exe所在路徑,生成Microsoft.Web.UI.WebControls.dll。

(2)在wwwroot下建立空目錄webctrl_client/1_0。

(3)将build/Runtime下的檔案拷至webctrl_client/1_0下。

(4)選擇工具箱的自定義工具箱,添加Microsoft.Web.UI.WebControls.dll。

有些麻煩

但如果你能找到字尾是msi的自動安裝版本,直接下一步就行(我一直用這個版本,hoho)

安裝後,通過“自定義工具箱”->“.net架構元件”把TreeView添加到工具箱裡

2.運作時無法顯示

一般是TreeView的版本問題,最好下載下傳英文版自動安裝版本重新安裝,安裝前應該先到添加删除程式裡卸掉原版本

3.顯示格式出錯(非樹狀顯示)

TreeView要求用戶端浏覽器版本為IE5.5及以上,最好要求用戶端更新為IE6.0

4.架構裡使用TreeView

設定NavigateUrl、Target屬性,可更新另外的Frame

5.找不到TreeNode類

使用TreeView,最好添加namespace:using Microsoft.Web.UI.WebControls;

6.周遊TreeView節點(遞歸算法)

asp.net 樹形目錄

private   void  Page_Load( object  sender, System.EventArgs e)

asp.net 樹形目錄
asp.net 樹形目錄

... {

asp.net 樹形目錄

 GetAllNodeText(TreeView1.Nodes);

asp.net 樹形目錄

}

asp.net 樹形目錄

void  GetAllNodeText(TreeNodeCollection tnc)

asp.net 樹形目錄
asp.net 樹形目錄

... {

asp.net 樹形目錄

 foreach(TreeNode node in tnc)

asp.net 樹形目錄
asp.net 樹形目錄

 ...{

asp.net 樹形目錄

  if(node.Nodes.Count!=0)

asp.net 樹形目錄

   GetAllNodeText(node.Nodes);

asp.net 樹形目錄

  Response.Write(node.Text + " ");

asp.net 樹形目錄

 }

asp.net 樹形目錄

}

7.得到node結點的父節點

asp.net 樹形目錄

TreeNode pnode;

asp.net 樹形目錄

if (node.Parent  is  TreeNode)

asp.net 樹形目錄

 pnode = (TreeNode)node.Parent;

asp.net 樹形目錄

else

asp.net 樹形目錄

  // node is root node

8.修改TreeView樣式(示例)

asp.net 樹形目錄

< iewc:TreeView  id ="TreeView1"  runat ="server"  HoverStyle ="color:blue;background:#00ffCC;"  DefaultStyle ="background:red;color:yellow;"  SelectedStyle ="color:red;background:#00ff00;" >

用代碼:

TreeView1.DefaultStyle["font-size"] = "20pt";

9.展開時不送出,改變選擇節點時才送出

将autopostback設定成false; 

在body裡添加  <body  οnlοad="initTree()"> 

然後在PageLoad裡寫: 

asp.net 樹形目錄

string   strTreeName   =    " TreeView1 " ; 

asp.net 樹形目錄

string   strRef   =   Page.GetPostBackEventReference(TreeView1); 

asp.net 樹形目錄

string   strScript   =    " <script  language="JavaScript">   "    +    " <!--   "    +    "             function  initTree()  {   "    + "                          "    +   strTreeName   +    " .onSelectedIndexChange  =  function()  {   "    +      " if  (event.oldTreeNodeIndex  !=   

asp.net 樹形目錄

event .newTreeNodeIndex)   "   +   " this .queueEvent( ' onselectedindexchange ' ,   event .oldTreeNodeIndex   +    ' , '    +    event .newTreeNodeIndex);   "   +     " window.setTimeout( ' "  +  strRef.Replace(" '" , " / ' ")    +  " ' ,   0 ,   ' JavaScript ' );   "   +     "                         }   "   +       "             }   "   +     " //   -->  "  +  "</script>"; 

asp.net 樹形目錄

Page.RegisterClientScriptBlock( " InitTree " ,strScript  );  

這樣就隻有你點選的節點更改的時候才送出!

10.TreeView結合XML

把XML檔案設定為如下格式,然後直接設定TreeNodeSrc為該XML檔案就行

asp.net 樹形目錄

<? xml version="1.0" encoding="GB2312" ?>

asp.net 樹形目錄

< TREENODES >

asp.net 樹形目錄

  < TREENODE  TEXT ="node0"  EXPANDED ="true" >

asp.net 樹形目錄

   < TREENODE  TEXT ="node1" />

asp.net 樹形目錄

   < TREENODE  TEXT ="node2" />

asp.net 樹形目錄

  </ TREENODE >

asp.net 樹形目錄

  < TREENODE  TEXT ="node3"  NavigateURL ="3.aspx" />

asp.net 樹形目錄

</ TREENODES >

或者用代碼

TreeView1.TreeNodeSrc="a.xml";

TreeView1.DataBind();

用戶端控制TreeView

http://expert.csdn.net/Expert/topic/1382/1382892.xml

asp.net 樹形目錄

1 .設定所選節點,如選中第二個節點

asp.net 樹形目錄

function  SetSelNode()

asp.net 樹形目錄
asp.net 樹形目錄

... {

asp.net 樹形目錄

 TreeView1.selectedNodeIndex="1";

asp.net 樹形目錄

}

asp.net 樹形目錄

2 .得到所選節點的Text,ID或NodeData

asp.net 樹形目錄

function  GetAttribute()

asp.net 樹形目錄
asp.net 樹形目錄

... {

asp.net 樹形目錄

 alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text"));

asp.net 樹形目錄

}

asp.net 樹形目錄

替換Text為ID或NodeData,可分别得到所選節點的ID或NodeData

asp.net 樹形目錄

3 .修改節點屬性,如修改第一個節點的Text

asp.net 樹形目錄

function  ModifyNode()

asp.net 樹形目錄
asp.net 樹形目錄

... {

asp.net 樹形目錄

 var node=TreeView1.getTreeNode("0");

asp.net 樹形目錄

 node.setAttribute("Text","hgknight");

asp.net 樹形目錄

}

asp.net 樹形目錄

4 .得到點選節點

asp.net 樹形目錄

function  TreeView1.onclick()

asp.net 樹形目錄
asp.net 樹形目錄

... {

asp.net 樹形目錄

 alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("Text"));

asp.net 樹形目錄

}

asp.net 樹形目錄

5 .添加節點

asp.net 樹形目錄

function  AddNode()

asp.net 樹形目錄
asp.net 樹形目錄

... {

asp.net 樹形目錄

 var node=TreeView1.createTreeNode();

asp.net 樹形目錄

 node.setAttribute("Text","hgknight");

asp.net 樹形目錄

 TreeView1.add(node);   

asp.net 樹形目錄

}

6.js周遊所有節點

asp.net 樹形目錄

 var AllRootNode = new  Array();

asp.net 樹形目錄

 AllRootNode = TreeView1.getChildren();

asp.net 樹形目錄

 AlertNode(AllRootNode);  

asp.net 樹形目錄

 function AlertNode(NodeArray)

asp.net 樹形目錄
asp.net 樹形目錄

  ... {

asp.net 樹形目錄

  if(parseInt(NodeArray.length)==0)

asp.net 樹形目錄

   return;

asp.net 樹形目錄

  else

asp.net 樹形目錄
asp.net 樹形目錄

  ...{

asp.net 樹形目錄

   for(i=0;i<NodeArray.length;i++)

asp.net 樹形目錄
asp.net 樹形目錄

   ...{

asp.net 樹形目錄

    var cNode;

asp.net 樹形目錄

    cNode=NodeArray[i];

asp.net 樹形目錄

    alert(cNode.getAttribute("Text"));

asp.net 樹形目錄

    if(parseInt(cNode.getChildren().length)!=0)

asp.net 樹形目錄

     AlertNode(cNode.getChildren());   

asp.net 樹形目錄

   }

asp.net 樹形目錄

  }

asp.net 樹形目錄

 }

--------------------------------------------------------------------------------

兩個用戶端操作TreeView節點CheckBox的小例子     選擇自 hgknight 的 Blog 

關鍵字   TreeView CheckBox javascript

第一個例子是當取消或選中節點選中狀态時,子節點也做相應的取消或選中變化

需要注意的是如果要初始設定TreeNode為選中狀态,隻能在用戶端設定。如果在伺服器端設定TreeNode為選中狀态,則在用戶端使用getAttribute("Checked"),得到的值永遠是true。

asp.net 樹形目錄
asp.net 樹形目錄

<% ... @ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35"  %>

asp.net 樹形目錄

< HTML >

asp.net 樹形目錄

  < HEAD >

asp.net 樹形目錄
asp.net 樹形目錄

   < script  language ="C#"  runat ="server" > ...

asp.net 樹形目錄

   private void Page_Load(object sender, System.EventArgs e)

asp.net 樹形目錄
asp.net 樹形目錄

   ...{  

asp.net 樹形目錄

    TreeView1.Attributes.Add("oncheck","tree_oncheck(this)");

asp.net 樹形目錄

   }

asp.net 樹形目錄

   </ script >

asp.net 樹形目錄
asp.net 樹形目錄

   < script  language ="javascript" > ...

asp.net 樹形目錄

<!--

asp.net 樹形目錄

//初始化選中節點

asp.net 樹形目錄

function initchecknode()

asp.net 樹形目錄
asp.net 樹形目錄

...{

asp.net 樹形目錄

 var node=TreeView1.getTreeNode("1");

asp.net 樹形目錄

 node.setAttribute("Checked","true");

asp.net 樹形目錄

 setcheck(node,"true");

asp.net 樹形目錄

 FindCheckedFromNode(TreeView1);

asp.net 樹形目錄

}

asp.net 樹形目錄

//oncheck事件

asp.net 樹形目錄

function tree_oncheck(tree)

asp.net 樹形目錄
asp.net 樹形目錄

...{

asp.net 樹形目錄

 var node=tree.getTreeNode(tree.clickedNodeIndex);

asp.net 樹形目錄

 var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");

asp.net 樹形目錄

 setcheck(node,Pchecked);

asp.net 樹形目錄

 document.all.checked.value="";

asp.net 樹形目錄

 document.all.unchecked.value="";

asp.net 樹形目錄

 FindCheckedFromNode(TreeView1);

asp.net 樹形目錄

}

asp.net 樹形目錄

//設定子節點選中

asp.net 樹形目錄

function setcheck(node,Pc)

asp.net 樹形目錄
asp.net 樹形目錄

...{

asp.net 樹形目錄

 var i;

asp.net 樹形目錄

 var ChildNode=new Array();

asp.net 樹形目錄

 ChildNode=node.getChildren();

asp.net 樹形目錄
asp.net 樹形目錄

 if(parseInt(ChildNode.length)==0)

asp.net 樹形目錄

  return;

asp.net 樹形目錄

 else

asp.net 樹形目錄
asp.net 樹形目錄

 ...{

asp.net 樹形目錄

  for(i=0;i<ChildNode.length;i++)

asp.net 樹形目錄
asp.net 樹形目錄

  ...{

asp.net 樹形目錄

   var cNode;

asp.net 樹形目錄

   cNode=ChildNode[i];

asp.net 樹形目錄

   if(parseInt(cNode.getChildren().length)!=0)

asp.net 樹形目錄

    setcheck(cNode,Pc);

asp.net 樹形目錄

   cNode.setAttribute("Checked",Pc);

asp.net 樹形目錄

  }

asp.net 樹形目錄

 }

asp.net 樹形目錄

}

asp.net 樹形目錄

//擷取所有節點狀态

asp.net 樹形目錄
asp.net 樹形目錄

function FindCheckedFromNode(node) ...{

asp.net 樹形目錄

 var i = 0;

asp.net 樹形目錄

 var nodes = new Array();

asp.net 樹形目錄

 nodes = node.getChildren();

asp.net 樹形目錄
asp.net 樹形目錄
asp.net 樹形目錄

 for (i = 0; i < nodes.length; i++) ...{

asp.net 樹形目錄

  var cNode;

asp.net 樹形目錄

  cNode=nodes[i];

asp.net 樹形目錄

  if (cNode.getAttribute("Checked"))

asp.net 樹形目錄

   AddChecked(cNode);

asp.net 樹形目錄

  else

asp.net 樹形目錄

      AddUnChecked(cNode);

asp.net 樹形目錄
asp.net 樹形目錄
asp.net 樹形目錄

  if (parseInt(cNode.getChildren().length) != 0 ) ...{

asp.net 樹形目錄

   FindCheckedFromNode(cNode);

asp.net 樹形目錄

  }

asp.net 樹形目錄

 }

asp.net 樹形目錄

}

asp.net 樹形目錄

//添加選中節點

asp.net 樹形目錄
asp.net 樹形目錄

function AddChecked(node) ...{

asp.net 樹形目錄

 document.all.checked.value += node.getAttribute("NodeData");

asp.net 樹形目錄

 document.all.checked.value += ',';

asp.net 樹形目錄

}

asp.net 樹形目錄

//添加未選中節點

asp.net 樹形目錄
asp.net 樹形目錄

function AddUnChecked(node) ...{

asp.net 樹形目錄

 document.all.unchecked.value += node.getAttribute("NodeData");

asp.net 樹形目錄

 document.all.unchecked.value += ',';

asp.net 樹形目錄

}

asp.net 樹形目錄

//-->

asp.net 樹形目錄

   </ script >

asp.net 樹形目錄

  </ HEAD >

asp.net 樹形目錄

  < body  onload ="initchecknode()" >

asp.net 樹形目錄

   < iewc:TreeView  id ="TreeView1"  runat ="server"  ExpandLevel ="5" >

asp.net 樹形目錄

    < iewc:TreeNode  NodeData ="0"  CheckBox ="True"  Text ="Node0"  Expanded ="True" >

asp.net 樹形目錄

     < iewc:TreeNode  NodeData ="1"  CheckBox ="True"  Text ="Node1"  Expanded ="True" ></ iewc:TreeNode >

asp.net 樹形目錄

     < iewc:TreeNode  NodeData ="2"  CheckBox ="True"  Text ="Node2"  Expanded ="True" >

asp.net 樹形目錄

      < iewc:TreeNode  NodeData ="3"  CheckBox ="True"  Text ="Node3"  Expanded ="True" >

asp.net 樹形目錄

       < iewc:TreeNode  NodeData ="4"  CheckBox ="True"  Text ="Node4"

asp.net 樹形目錄

Expanded ="True" ></ iewc:TreeNode >

asp.net 樹形目錄

      </ iewc:TreeNode >

asp.net 樹形目錄

     </ iewc:TreeNode >

asp.net 樹形目錄

    </ iewc:TreeNode >

asp.net 樹形目錄

    < iewc:TreeNode  NodeData ="5"  CheckBox ="True"  Text ="Node5"  Expanded ="True" >

asp.net 樹形目錄

     < iewc:TreeNode  NodeData ="6"  CheckBox ="True"  Text ="Node6"  Expanded ="True" ></ iewc:TreeNode >

asp.net 樹形目錄

    </ iewc:TreeNode >

asp.net 樹形目錄

    < iewc:TreeNode  NodeData ="7"  CheckBox ="True"  Text ="Node7"  Expanded ="True" >

asp.net 樹形目錄

     < iewc:TreeNode  NodeData ="8"  CheckBox ="True"  Text ="Node8"  Expanded ="True" >

asp.net 樹形目錄

      < iewc:TreeNode  NodeData ="9"  CheckBox ="True"  Text ="Node9"

asp.net 樹形目錄

Expanded ="True" ></ iewc:TreeNode >

asp.net 樹形目錄

     </ iewc:TreeNode >

asp.net 樹形目錄

    </ iewc:TreeNode >

asp.net 樹形目錄

   </ iewc:TreeView >< P >

asp.net 樹形目錄

    < TABLE  id ="Table1"  cellSpacing ="1"  cellPadding ="1"  width ="300"  border ="1" >

asp.net 樹形目錄

     < TR >

asp.net 樹形目錄

      < TD >

asp.net 樹形目錄

       < asp:Label  id ="Label1"  runat ="server" > checked </ asp:Label ></ TD >

asp.net 樹形目錄

      < TD >

asp.net 樹形目錄

       < INPUT  id ="checked"  type ="text"  size ="32" ></ TD >

asp.net 樹形目錄

     </ TR >

asp.net 樹形目錄

     < TR >

asp.net 樹形目錄

      < TD >

asp.net 樹形目錄

       < asp:Label  id ="Label2"  runat ="server" > unchecked </ asp:Label ></ TD >

asp.net 樹形目錄

      < TD >< INPUT  id ="unchecked"  type ="text"  size ="32" ></ TD >

asp.net 樹形目錄

     </ TR >

asp.net 樹形目錄

    </ TABLE >

asp.net 樹形目錄

    < br >

asp.net 樹形目錄

   </ P >

asp.net 樹形目錄

  </ body >

asp.net 樹形目錄

</ HTML >

第二個例子是關于如何在伺服器端得到用戶端設定後的節點選中狀态

asp.net 樹形目錄
asp.net 樹形目錄

<% ... @ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls,

asp.net 樹形目錄

Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>

asp.net 樹形目錄

<HTML>

asp.net 樹形目錄

 <HEAD>

asp.net 樹形目錄

  <script language="C#" runat="server">

asp.net 樹形目錄

   private void Button1_Click(object sender, System.EventArgs e)

asp.net 樹形目錄

   {

asp.net 樹形目錄

    Response.Write(TreeView1.Nodes[0].Checked);

asp.net 樹形目錄

   }

asp.net 樹形目錄

  </script>

asp.net 樹形目錄

  <script language="javascript">

asp.net 樹形目錄

   function set_check()

asp.net 樹形目錄

   {

asp.net 樹形目錄

    var nodeindex = "0";

asp.net 樹形目錄

    var node=TreeView1.getTreeNode(nodeindex);

asp.net 樹形目錄

    node.setAttribute("Checked","True");

asp.net 樹形目錄

    TreeView1.queueEvent('oncheck', nodeindex);

asp.net 樹形目錄

   }

asp.net 樹形目錄

  </script>

asp.net 樹形目錄

 </HEAD>

asp.net 樹形目錄

 <body>

asp.net 樹形目錄

  <form id="TestTree" method="post" runat="server">

asp.net 樹形目錄

   <iewc:TreeView id="TreeView1" runat="server">

asp.net 樹形目錄

    <iewc:TreeNode CheckBox="True" Text="Node0"></iewc:TreeNode>

asp.net 樹形目錄

   </iewc:TreeView>

asp.net 樹形目錄

   <br>

asp.net 樹形目錄

   <input type="button" value="set check" onclick="set_check()">

asp.net 樹形目錄

   <br>

asp.net 樹形目錄

   <asp:Button id="Button1" runat="server" Text="submit" OnClick="Button1_Click"></asp:Button>

asp.net 樹形目錄

  </form>

asp.net 樹形目錄

 </body>

asp.net 樹形目錄

</HTML>

繼續閱讀