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节点(递归算法)

private   void  Page_Load( object  sender, System.EventArgs e)
{
 GetAllNodeText(TreeView1.Nodes);
}

void  GetAllNodeText(TreeNodeCollection tnc)
{
 
foreach(TreeNode node in tnc)
 
{
  
if(node.Nodes.Count!=0)
   GetAllNodeText(node.Nodes);
  Response.Write(node.Text 
+ " ");
 }

}

7.得到node结点的父节点
TreeNode pnode;
if (node.Parent  is  TreeNode)
 pnode
= (TreeNode)node.Parent;
else
 
// node is root node

8.修改TreeView样式(示例)
< 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里写: 
string   strTreeName   =    " TreeView1 "
string   strRef   =   Page.GetPostBackEventReference(TreeView1); 
string   strScript   =    " <script  language="JavaScript">   "    +    " <!--   "    +    "             function  initTree()  {   "    + "                          "    +   strTreeName   +    " .onSelectedIndexChange  =  function()  {   "    +      " if  (event.oldTreeNodeIndex  !=   
event .newTreeNodeIndex)   "   +   " this .queueEvent( ' onselectedindexchange ' ,   event .oldTreeNodeIndex   +    ' , '    +    event .newTreeNodeIndex);   "   +     " window.setTimeout( ' "  +  strRef.Replace(" '" , " / ' ")    +  " ' ,   0 ,   ' JavaScript ' );   "   +     "                         }   "   +       "             }   "   +     " //   -->  "  +  "</script>"; 
Page.RegisterClientScriptBlock( " InitTree " ,strScript  );  

 
这样就只有你点击的节点更改的时候才提交!
10.TreeView结合XML
把XML文件设置为如下格式,然后直接设置TreeNodeSrc为该XML文件就行
<? xml version="1.0" encoding="GB2312" ?>
< TREENODES >
 
< TREENODE  TEXT ="node0"  EXPANDED ="true" >
  
< TREENODE  TEXT ="node1" />
  
< TREENODE  TEXT ="node2" />
 
</ TREENODE >
 
< TREENODE  TEXT ="node3"  NavigateURL ="3.aspx" />
</ TREENODES >

或者用代码
TreeView1.TreeNodeSrc="a.xml";
TreeView1.DataBind();
 
客户端控制TreeView
http://expert.csdn.net/Expert/topic/1382/1382892.xml
1 .设置所选节点,如选中第二个节点
function  SetSelNode()
{
 TreeView1.selectedNodeIndex
="1";
}

2 .得到所选节点的Text,ID或NodeData
function  GetAttribute()
{
 alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute(
"Text"));
}

替换Text为ID或NodeData,可分别得到所选节点的ID或NodeData
3 .修改节点属性,如修改第一个节点的Text
function  ModifyNode()
{
 
var node=TreeView1.getTreeNode("0");
 node.setAttribute(
"Text","hgknight");
}

4 .得到点击节点
function  TreeView1.onclick()
{
 alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute(
"Text"));
}

5 .添加节点
function  AddNode()
{
 
var node=TreeView1.createTreeNode();
 node.setAttribute(
"Text","hgknight");
 TreeView1.add(node);   
}

6.js遍历所有节点
 var AllRootNode = new  Array();
 AllRootNode
= TreeView1.getChildren();
 AlertNode(AllRootNode);  
 function AlertNode(NodeArray)
 
{
  
if(parseInt(NodeArray.length)==0)
   
return;
  
else
  
{
   
for(i=0;i<NodeArray.length;i++)
   
{
    var cNode;
    cNode
=NodeArray[i];
    alert(cNode.getAttribute(
"Text"));
    
if(parseInt(cNode.getChildren().length)!=0)
     AlertNode(cNode.getChildren());   
   }

  }

 }

--------------------------------------------------------------------------------
两个客户端操作TreeView节点CheckBox的小例子     选择自 hgknight 的 Blog 
关键字   TreeView CheckBox javascript
 
 
第一个例子是当取消或选中节点选中状态时,子节点也做相应的取消或选中变化
需要注意的是如果要初始设置TreeNode为选中状态,只能在客户端设置。如果在服务器端设置TreeNode为选中状态,则在客户端使用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" >
<!--
//初始化选中节点
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);
}

//设置子节点选中
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);
  }

 }

}

//获取所有节点状态
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);
  }

 }

}

//添加选中节点
function AddChecked(node) {
 document.all.checked.value 
+= node.getAttribute("NodeData");
 document.all.checked.value 
+= ',';
}

//添加未选中节点
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 >

 
第二个例子是关于如何在服务器端得到客户端设置后的节点选中状态
<% @ 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>

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值