在 ASP.NET 页面中使用 TreeView 控件

简介:

None.gif 遍历节点 
None.gif
void  GetAllNodeText(TreeNodeCollection tnc) 
ExpandedBlockStart.gif

InBlock.gif 
foreach(TreeNode node in tnc) 
ExpandedSubBlockStart.gif 

InBlock.gif  
if(node.Nodes.Count!=0
InBlock.gif   GetAllNodeText(node.Nodes); 
InBlock.gif  Response.Write(node.Text 
+ " "); 
ExpandedSubBlockEnd.gif }
 
ExpandedBlockEnd.gif}
 
None.gif
None.gif建树 
None.gif
private   void  CreateTree(TreeNodeCollection folderTreeNodeCollection ,  string  parentID) 
ExpandedBlockStart.gif

InBlock.gif  
if (parentID==""
ExpandedSubBlockStart.gif  

InBlock.gif    dv.RowFilter
= "ParentID is null"
ExpandedSubBlockEnd.gif  }
 
InBlock.gif  
else 
ExpandedSubBlockStart.gif  

InBlock.gif    dv.RowFilter
= "ParentID="+"'"+parentID+"'"
ExpandedSubBlockEnd.gif  }
 
InBlock.gif  
foreach (DataRowView drv in dv) 
ExpandedSubBlockStart.gif  

InBlock.gif    TreeNode tn
= new TreeNode(); 
InBlock.gif    tn.Expanded
= true ; 
InBlock.gif    tn.ID
=drv.Row["TypeID"].ToString().Trim(); 
InBlock.gif    tn.Text
=drv.Row["TypeName"].ToString().Trim(); 
InBlock.gif    folderTreeNodeCollection.Add(tn); 
InBlock.gif    CreateTree(tn.Nodes,tn.ID); 
ExpandedSubBlockEnd.gif  }
 
ExpandedBlockEnd.gif}
 
None.gif
None.gif遍历选中节点 
None.gif
private   void  getAllCheckedNode(TreeNodeCollection tnc) 
ExpandedBlockStart.gif

InBlock.gif  
foreach (TreeNode tn in tnc) 
ExpandedSubBlockStart.gif  

InBlock.gif    
if (tn.Checked== true ) 
ExpandedSubBlockStart.gif    

InBlock.gif      Response.Write(tn.Text
+””); 
ExpandedSubBlockEnd.gif    }
 
InBlock.gif    
if (tn.Nodes.Count>0
ExpandedSubBlockStart.gif    

InBlock.gif      getAllCheckedNode(tn.Nodes); 
ExpandedSubBlockEnd.gif    }
 
ExpandedSubBlockEnd.gif  }
 
ExpandedBlockEnd.gif}
 
None.gif
None.gif选中或取消选中节点 , 自动选中或取消选中期子节点 
None.gif
private   void  CheckedChildNode(TreeNode tn) 
ExpandedBlockStart.gif

InBlock.gif  
if (tn.Nodes.Count>0
ExpandedSubBlockStart.gif  

InBlock.gif    
foreach (TreeNode tnn in tn.Nodes) 
ExpandedSubBlockStart.gif    

InBlock.gif      tnn.Checked
=tn.Checked; 
InBlock.gif      CheckedChildNode(tnn); 
ExpandedSubBlockEnd.gif    }
 
ExpandedSubBlockEnd.gif  }
 
ExpandedBlockEnd.gif}
 
None.gif
None.gif调用方法
None.gif
private   void  TreeView1_Check(  object  sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e) 
ExpandedBlockStart.gif

InBlock.gif    setAllCheckedNode(TreeView1.GetNodeFromIndex(e.Node)); 
ExpandedBlockEnd.gif}
 

1、全部读取并一次性展现

    

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

           {

                if(IsPostBack)

                {

                     return;

                }

                DBSystem.ExecuteSQL tmp = new DBSystem.ExecuteSQL("T");

                DataTable dt = tmp.GetDataTable("select * from TreeView");//从数据库抓出数据

                this.AddNodes(dt,null,"0");   //添加节点

                this.TreeView1.SelectedNodeIndex="";   //不选中任何节点。

/*下一节将介绍如何修改TreeView.cs 源码来取消默认选中节点的方法*/

           }

 

           /// <summary>

           /// 添加节点及其包含的子节点

           /// </summary>

           /// <param name="dt">从数据库抓出的 DataTable</param>

           /// <param name="node">将要添加子节点的父节点</param>

           /// <param name="id">父节点的 ID,“0 为根节点</param>

           private void AddNodes(DataTable dt,TreeNode node,string id)

           {

                DataRow[] rows = dt.Select("ParentID="+id); //筛选出属于父节点 node”的子节点集合

                foreach(DataRow dr in rows) //循环子节点集合

                {

                     TreeNode nd = new TreeNode();

                     nd.NavigateUrl=dr["URL"].ToString(); //设置浏览的网址

                     nd.NodeData=dr["NodeID"].ToString(); //存放节点 ID

                     nd.Text=dr["NodeName"].ToString();   //设置节点名称

                     this.AddNodes(dt,nd,nd.NodeData);    //递归,添加该节点的子节点

                     if(node==null || id=="0")

                     {

                           this.TreeView1.Nodes.Add(nd);    //添加至根节点

                     }

                     else

                     {

                           node.Nodes.Add(nd);              //添加子节点

                     }

                }

2、       展开节点时读取该节点的数据

TreeView 控件属性→ 自动提交(AutoPostBack  True


TreeView 控件属性→ 事件  双击展开(Expand


 

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

           {

                if(!IsPostBack)

                {

                     this.AddSingleNode(null,"0"); //找出根节点

                }

                this.TreeView1.SelectedNodeIndex="";   //不选中任何节点

           }

 

           /// <summary>

           /// 展开节点时,触发的事件

           /// </summary>

           /// <param name="sender">TreeView 控件</param>

           /// <param name="e"></param>

           private void TreeView1_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)

           {

                TreeNode nd = this.TreeView1.GetNodeFromIndex(e.Node); //找到触发事件的节点,即正在展开的节点

                if(nd.Nodes[0].NodeData=="") //第一次加载,即只有“正在加载……”这一项

                {

                     this.AddSingleNode(nd,nd.NodeData); //加载子节点

                }

           }

 

           /// <summary>

           /// 只查找、添加单个节点下的子节点

           /// </summary>

           /// <param name="node">需要添加子节点的 TreeNode</param>

           /// <param name="id">该节点的 NodeID </param>

           private void AddSingleNode(TreeNode node,string id)

           {

                if(node!=null && id!="0")

                {

                     node.Nodes.Clear();//清空节点,主要是把“正在加载……”这一项移除

                }

                DBSystem.ExecuteSQL tmp = new DBSystem.ExecuteSQL("T");

                DataTable dt = tmp.GetDataTable("select * from TreeView where ParentID="+id);//从数据库抓出数据

                foreach(DataRow dr in dt.Rows) //历遍所有子节点

                {

                     TreeNode nd = new TreeNode();

                     nd.NavigateUrl=dr["URL"].ToString(); //设置浏览的网址

                     nd.NodeData=dr["NodeID"].ToString(); //存放节点 ID

                     nd.Text=dr["NodeName"].ToString();   //设置节点名称

 

                     TreeNode child = new TreeNode();     //此节点只作为“nd”展开的依据,并无它意

                     child.Text="正在加载……";

                     nd.Nodes.Add(child);

                     if(node==null|| id=="0")

                     {

                           this.TreeView1.Nodes.Add(nd);    //添加至根节点

                     }

                     else

                     {

                           node.Nodes.Add(nd);              //添加子节点

                     }

                }

           }

            修改“TreeView.cs”源码,取消 TreeView 默认选中节点

1、TreeView.cs 文件

在文中﹐找到  protected override void OnLoad(EventArgs e)”事件

 protected override void OnPreRender(EventArgs e) 事件,修改以下代码

 

if ((SelectedNodeIndex == "" || SelectedNodeIndex == String.Empty) && Nodes.Count > 0)

           //SelectedNodeIndex = "0"; //修改前

           SelectedNodeIndex = "";    //修改后

 

2、TreeView.htc 文件

在“C:\Inetpub\wwwroot\webctrl_client\1_0\ TreeView.htc”中找到“function ondocumentready()”把以下代码注释掉

// verify selectedNodeIndex

/****************** Change By Jerry On 2005-01-25 ******************/

/*

if (getNodeFromIndex(selectedNodeIndex) == null) { if (getNodeFromIndex("0") != null) selectedNodeIndex = "0"; else selectedNodeIndex = ""; }

*/

/****************** Change By Jerry On 2005-01-25 ******************/

在“function tryToBuildTreeFromRoot()”修改以下代码

if (selectedNodeIndex.length == 0)

                {

 //prop_selectedNodeIndex = "0";  //修改前

 prop_selectedNodeIndex = ""; //修改后

}

3、使用

修改“TreeView.cs”后,重新编译一次,生成新的“Microsoft.Web.UI.WebControls.dll”。应用时只需要设置SelectedNodeIndex”为 “” 即可

              this.TreeView1.SelectedNodeIndex="";   //不选中任何节点。

 

            使用 XML 文档创建 TreeView

1、XML 文档的要求

a)      描述节点名称是固定的“<treenodes></treenodes>”与“<treenode></treenode>

b)      虽然 XML 文文件对字母的大小写严格区分,但绑定时会忽略

c)      <treenode></treenode>节点中的属性,必须与 TreeView 控件中的 TreeNode 属性对应

d)      <treenode></treenode>”节点中的文本不能写在节点内,只能以 Text”属性出现,如“<treenode>Node01</treenode>”行不通,应为“<treenodeText="Node01">

</treenode>

以下是一个可用于“TreeView”控件绑定源的范例﹕

<?xml version="1.0" encoding="utf-8" ?>

<TREENODES>

     <TREENODE Text="Node01">

           <TREENODE NavigateUrl="04.htm" Text="Node04"></TREENODE>

     </TREENODE>

     <treenode NavigateUrl="05.htm" text="Node05" NodeData="05" CheckBox="true"></treenode>

     <TREENODE NavigateUrl="03.htm" Text="Node03"></TREENODE>

</TREENODES>

2、绑定的代码

                this.TreeView1.TreeNodeSrc="TreeXML.xml";

                this.TreeView1.DataBind();




本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2005/12/07/292657.html,如需转载请自行联系原作者

相关文章
|
21天前
|
SQL 开发框架 前端开发
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
25 0
|
1月前
|
SQL 开发框架 JavaScript
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
15 0
|
2月前
|
JavaScript C#
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
24 0
|
2月前
|
JavaScript Linux C#
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
40 0
|
2月前
|
开发框架 .NET 数据安全/隐私保护
Asp.Net第二章服务器端控件
Asp.Net第二章服务器端控件
17 0
|
2月前
|
开发框架 JavaScript .NET
Asp.Net就业课之三验证控件
Asp.Net就业课之三验证控件
39 0
|
.NET 数据库连接 数据库
艾伟_转载:温习:ASP.NET页面生命周期
ASP.NET 页面生命周期虽然是最基础的东东,但我发现很多人不能准确地的说出,可能多数程序人员只是对深层技术感兴趣的原因吧?可是如果忘记了最基础的东西,有时会给你的开发制造很大的麻烦。现在把MSDN上的ASP.NET页面生命周期贴出来,大家温习一下吧(温习之前请问一下自己你知道吗): ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。
855 0
|
.NET 开发框架 缓存

热门文章

最新文章

相关产品

  • 云迁移中心