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里添加   
然后在PageLoad里写: 
string   strTreeName   =    " TreeView1 "
string   strRef   =   Page.GetPostBackEventReference(TreeView1); 
string   strScript   =    "    "    +    "   "  +  ""; 
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" >

  
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>

 

你可能感兴趣的:(asp.net 树形目录)