日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

ASP.NET TREEVIEW 使用方法(2) - yyf919 - 博客園

 ShangShujie 2007-10-16
asp.net TreeView安裝、使用(如何將TreeView打包發(fā)布)(帶CheckBox選擇框的TreeView的初始化,TreeView客戶端操作:選擇父節(jié)點后自動選擇所有子節(jié)點,子節(jié)點選擇后自動選擇父節(jié)點)(TreeView節(jié)點精確定位)

2.包括TreeView的asp.net程序的打包問題:
http://ttyp.cnblogs.com/archive/2005/06/01/165621.html
http://community.csdn.net/Expert/topic/4300/4300558.xml?temp=.7716028

在web.config加入以下節(jié)

 

    <configSections>
        
<section name="MicrosoftWebControls" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />    
    
</configSections>
 
    
<MicrosoftWebControls>
        
<add key="CommonFiles" value="/web/treepath/"></add>        
    
</MicrosoftWebControls>


注意:configSections一定要放在第一個子節(jié)最前面.

剪切默認網(wǎng)站的webctrl_client目錄到虛擬目錄web/treepath/下,運行程序,樹 型界面出現(xiàn)了,只是前面的加減號出現(xiàn)問題,再右鍵查看WEB代碼,發(fā)現(xiàn)SystemImagesPath屬性還是指到webctrl_client目錄 下,看了SystemImagesPath的代碼,把treeview控件的SystemImagesPath設(shè)置為空,再次運行程序,OK!全部通過, treeview的圖片目錄再也不需要依賴默認網(wǎng)站的圖片目錄了,打包也變的方便了

3.客戶端操作TreeView帶CheckBox的好例子(1)--選擇 /取消父節(jié)點后其所有子節(jié)點自動選擇 /取消。不過里面有點小問題要注意:

(1)就是如何初始化已經(jīng)選擇的節(jié)點:注意要從客戶端初始化的(把選擇的節(jié)點放在客戶端一個隱藏域里通過JS初始化).如果你在服務(wù)器端初始化了將無法在客戶端修改它的狀態(tài).

(2) 如何獲得客戶端設(shè)置的節(jié)點:在客戶端改變了選擇狀態(tài)(node.setAtrribute("check","ture"))后,通過服務(wù)器端是無法獲得 選擇的值的,也只能在客戶端獲得它(通過一個input type="hiiden" runat="server"來保存選擇的值).
上面兩個問題都是參考了下面的代碼完成的.


兩個客戶端操作TreeView節(jié)點CheckBox的小例子 (轉(zhuǎn)江雨.net)(自動選擇子節(jié)點)
下面是修改后詳細代碼:

<script language="javascript">

            
//初始化選中節(jié)點
            function initchecknode()
            
{
                
//獲得需要初始化選擇狀態(tài)的節(jié)點的字符串.
                var selectedNodes = document.all.checkedNodes.value;
                
var arrayNodes = new Array();
                arrayNodes 
= selectedNodes.split(",");
                
var AllRootNode=new Array();
                AllRootNode
=document.getElementById("TreeView1").getChildren();
                
//初始化選擇的節(jié)點
                findAndCheckedNodes(AllRootNode,arrayNodes);
            }


            
//根據(jù)已選擇的節(jié)點的字符串初始化選擇的節(jié)點
            function findAndCheckedNodes(NodeArray,nodeDatas)
            
{
                
//alert(NodeArray.length);
                 if(parseInt(NodeArray.length)==0)
                 
{
                    
return;
                }

                
else
                
{
                    
for(var i=0;i<parseInt(NodeArray.length);i++)
                    
{
                        
var cNode,nodeData;
                        cNode
=NodeArray[i];
                        
////如果該節(jié)點在nodeDatas里則初始化checked = true;
                        nodeData = cNode.getAttribute("NodeData");
                        
for(var j=0;j<nodeDatas.length;j++)
                        
{
                            
if(nodeDatas[j] == nodeData)
                            
{
                                cNode.setAttribute(
"checked","true");
                                
break;
                            }

                        }

                        
//如果有子節(jié)點,則繼續(xù)遞歸
                        if(parseInt(cNode.getChildren().length)!=0)
                        findAndCheckedNodes(cNode.getChildren(),nodeDatas);    
                    }

                }

            }

            
            
//節(jié)點的oncheck事件
            function tree_oncheck(tree)
            
{
                
var node=tree.getTreeNode(tree.clickedNodeIndex);
                
var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
                setcheck(node,Pchecked);
                document.all.checkedNodes.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.checkedNodes.value 
+= node.getAttribute("NodeData");
                document.all.checkedNodes.value 
+= ‘,‘;
            }

            
//添加未選中節(jié)點
            function AddUnChecked(node)
            
{
                document.all.unchecked.value 
+= node.getAttribute("NodeData");
                document.all.unchecked.value 
+= ‘,‘;
            }

            
        
</script>

 

    <body MS_POSITIONING="FlowLayout" onload="initchecknode()">
        
<form id="Form1" method="post" runat="server">
            
<FONT face="宋體">
                
<TABLE class="main" id="Table1">
                    
<TR>
                        
<TD></TD>
                        
<TD align="center" height="50">權(quán)限管理</TD>
                        
<TD></TD>
                    
</TR>
                    
<TR>
                        
<TD></TD>
                        
<TD>用戶名:
                            
<asp:label id="lblUserName" runat="server">Label</asp:label></TD>
                        
<TD></TD>
                    
</TR>
                    
<TR>
                        
<TD></TD>
                        
<TD><iewc:treeview id="TreeView1" runat="server" ExpandLevel="1" SelectExpands="True" SystemImagesPath="/webctrl_client/1_0/treeimages/"
                                ImageUrl
="images/fclose.gif" SelectedImageUrl="images/bookmark.gif" ExpandedImageUrl="images/fopen.gif"
                                Target
="main" AutoSelect="True" wilth="100%"></iewc:treeview></TD>
                        
<TD></TD>
                    
</TR>
                    
<TR>
                        
<TD></TD>
                        
<TD align="center" height="50">
                            
<asp:button id="BtnSure" runat="server" Text="保存"></asp:button> 
                        
</TD>
                        
<TD></TD>
                    
</TR>
                
</TABLE>
            
<INPUT id="checkedNodes" type="hidden" size="32" runat="server" NAME="checkedNodes"> <!--已經(jīng)選擇的節(jié)點每個節(jié)點間用","分隔.-->
            
<INPUT id="unchecked" type="hidden" size="32">
        
</form>
    
</body>

主要后臺代碼:




        
//數(shù)據(jù)訪問實例
protected ClassConn connE = new ClassConn();

private void Page_Load(object sender, System.EventArgs e)
{
    
// 在此處放置用戶代碼以初始化頁面
    if ( !IsPostBack)
    
{
        TreeView1.Attributes.Add(
"oncheck","tree_oncheck(this)");
        ViewState[
"UserId"= Request.QueryString["id"]+string.Empty;

        
//初始化用戶名
        lblUserName.Text=connE.GetFieldValue("string","select name from EPM_EmployeeList where id = "+ViewState["UserId"].ToString());
        ViewState[
"dsTree"= connE.getDs("select * from EPM_DepartmentList where corpid="+Session["EnterpriseId"].ToString()+" and (type ="+Session["EnterpriseType"].ToString()+" or type=2)  and state=1 order by ShowIndex");
        connE.Close();
        
//初始化權(quán)限信息    
        InitData();


        
    }

}



/// <summary>
/// 初始化權(quán)限樹.
/// </summary>
/// <param name="nFatherid">父節(jié)點的ID</param>
/// <param name="node"></param>

protected void initTree( int nFatherid,TreeNode fatherNode)
{
    DataSet ds 
= (DataSet)ViewState["dsTree"];
    DataView dv 
= new DataView(ds.Tables[0]);
    dv.RowFilter 
= "[parentDeptid] = "+nFatherid;
    
    
foreach ( DataRowView Row in dv )
    
{
        TreeNode node 
= new TreeNode();
        
if (fatherNode == null)//根節(jié)點
        {
            node.Text
=Row["name"].ToString();
            node.NodeData 
= Row["id"].ToString();
            node.CheckBox 
= true;
            
this.TreeView1.Nodes.Add(node);
            
//node.Expanded=false;//是否展開,若設(shè)置為true 則ExpandLevel="1" 無效
            initTree(Int32.Parse(Row["id"].ToString()),node);//遞歸
        }

        
else
        
{
            node.Text 
= Row["name"].ToString();
            node.NodeData 
= Row["id"].ToString();
            
//node.NavigateUrl = Row["url"].ToString();
            node.CheckBox = true;
            fatherNode.Nodes.Add(node);
            initTree(Int32.Parse(Row[
"id"].ToString()),node);//遞歸
        }

    }


}


/// <summary>
/// 設(shè)置權(quán)限的字符串,沒個權(quán)限間用逗號分隔.
/// </summary>
/// <returns></returns>

private string  InitPowers()
{
    
string strPowers = string.Empty;
    
string strSql = "select id, DeptID from  EPM_PowerList where EMPid ="+ViewState["UserId"].ToString();
    SqlDataReader reader 
= connE.getDreader(strSql);
    
while(reader.Read())
    
{
        
if (strPowers.Length == 0)
        
{
            strPowers 
= reader[1].ToString();
        }

        
else
        
{
            strPowers 
+= ","+reader[1].ToString();
        }

    }

    reader.Close();
    
return strPowers;
}


/// <summary>
/// 初始化權(quán)限樹
/// </summary>

private void InitData()
{
    
//獲得權(quán)限字符串
    string strPowers = InitPowers();
    
//把權(quán)限字符串賦給checkedNodes.
    this.checkedNodes.Value = strPowers;
    
//初始化菜單樹,使用遞歸調(diào)用.
    this.TreeView1.Nodes.Clear();
    initTree(
0,(TreeNode)null);
}




/// <summary>
/// 保存權(quán)限的設(shè)置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>

private void BtnSure_Click(object sender, System.EventArgs e)
{
    
//先刪除原來權(quán)限的設(shè)置
    string strSql = "delete from EPM_PowerList where empid="+ViewState["UserId"].ToString();
    connE.runSqlOnly(strSql);
    
//重新設(shè)置權(quán)限
    SaveTree();
    connE.Alert(
"保存成功!",Page);

    
//重新在服務(wù)器端初始權(quán)限信息
    InitData();
    
}


/// <summary>
/// 保存樹中已選擇的節(jié)點
/// </summary>


protected void SaveTree()
{
    
//獲得所有已經(jīng)選擇的接點
    string strSelected = string.Empty;
    strSelected 
= this.checkedNodes.Value;
    
if(strSelected != string.Empty)
    
{
        strSelected 
= strSelected.Substring(0,strSelected.Length-1);
        
string [] strSelecteds  = strSelected.Split(,);
        
foreach(string str in strSelecteds)
        
{
            
string strSql = "insert EPM_PowerList (EMPid,deptid) values (‘"+ViewState["UserId"].ToString()+"‘,‘"+str+"‘)";
            connE.runSqlOnly(strSql);
        }

    }

    
}


3.客戶端操作TreeView帶CheckBox的好例子(2)--選擇子節(jié)點后自動選擇父節(jié)點;取消子節(jié)點后根據(jù)情況的遞歸取消父節(jié)點。
把上面的tree_oncheck()修改一下,然后增加兩個方法setParent()和checkBrother(),代碼如下:

//節(jié)點的oncheck事件
function tree_oncheck(tree)
{
    
var node=tree.getTreeNode(tree.clickedNodeIndex);
    
var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
    setcheck(node,Pchecked);
    setParent(node,Pchecked);
//如果是選擇那么選擇其父接點.
    document.all.checkedNodes.value="";
    document.all.unchecked.value
="";
    FindCheckedFromNode(TreeView1);
}


//設(shè)置子節(jié)點選中/取消;
//
同時需要設(shè)置父節(jié)點的狀態(tài)(如果是取消選中的話,僅僅設(shè)置本節(jié)點及其所有字接點,不涉及父接點)
function setParent(node,Pc)
{
    
var parentNode = node.getParent();
    
if(parentNode)
    
{    
        
var parentNodeFather = parentNode.getParent();
        
if(parentNodeFather)
        
{
            setParent(parentNode,Pc);
        }

        
if(Pc)
            
{parentNode.setAttribute("checked",Pc);}
        
else
        
{
            checkBrother(parentNode,Pc,node.getAttribute(
"NodeData"))
        }

    }

}

//檢查子接點是否有選擇的,如果有一個選擇了,那返回true
//
只查第一級節(jié)點.
function checkBrother(parentNode,Pc,nodeData)
{
    
var childNodes = new Array();
    childNodes 
= parentNode.getChildren();
    
if(childNodes.length >0)
    
{
        
var bChecked = true;
        
for(var i=0;i<childNodes.length;i++)
        
{
            
if(childNodes[i].getAttribute("checked"== true &&  childNodes[i].getAttribute("NodeData"!= nodeData)
            
{
                
//alert(i+childNodes[i].getAttribute("Text"));
                bChecked = false;
                
break;
            }

        }

        
if(bChecked)
        
{
            parentNode.setAttribute(
"checked",Pc);
        }

        
else
        
{
            
//所有父結(jié)點選擇
            setParent(parentNode,!Pc)
        }

    }

    
else
    
{
        parentNode.setAttribute(
"checked",Pc);
    }

}



4.TreeView節(jié)點的精確定位問題(通過NodeData來定位)

    //Page_Load事件里根據(jù)NodeData來展開到到定位的節(jié)點
    
//這里是修改別人的(作者是根據(jù)Node的Text定位的.
    FindInTree2(Request.QueryString["selectedNodeData"].ToString());

    
//根據(jù)NodeDate尋找節(jié)點
    private void FindInTree2(string strNodeData)
    
{  
        
foreach (TreeNode tn in TreeView1.Nodes)            
        
{
            
if (tn.NodeData != strNodeData)
            
{   
                FindInTree2(tn,strNodeData);
            }
 
            
else
            
{   
                ExpandTree2(tn);
                
return;
            }

        }

    }

    
//根據(jù)NodeDate尋找節(jié)點
    private void FindInTree2(TreeNode objTreeNode,string strNodeData)
    
{   
        
foreach (TreeNode tn in objTreeNode.Nodes)            
        
{
            
if (tn.NodeData != strNodeData)
            
{

                FindInTree2(tn,strNodeData);
            }
 
            
else
            
{   
                ExpandTree2(tn);
                
return;
            }

        }

    }

    
//根據(jù)NodeDate展開節(jié)點
    private void ExpandTree2(TreeNode objTreeNode)
    
{   
        
string strIndex = "0";

        objTreeNode.Expanded 
= true;

        strIndex 
= objTreeNode.GetNodeIndex();

        
while (objTreeNode.Parent is TreeNode)
        
{
            objTreeNode 
= ((TreeNode)objTreeNode.Parent);
            objTreeNode.Expanded 
= true;                
        }


        TreeView1.SelectedNodeIndex 
= strIndex;
    }



5.asp.net 2.0里TreeView已經(jīng)集成了,不需要單獨安裝了,但現(xiàn)在偶覺得,他只是換湯不換藥,特別是在節(jié)點定位,和客戶端操作上這兩個關(guān)鍵問題上沒啥改進.(偶沒用過只是看了它的介紹.)

ASP.NET 2.0 的TreeView 控件介紹(轉(zhuǎn)載)

TreeView客戶端操作在這里啊~~~~~~~~~~~~
http://msdn.microsoft.com/library/default.asp?url=/workshop/webcontrols/behaviors/library/TreeView/TreeView.asp

http://www.microsoft.com/china/msdn/archives/library/workshop/webcontrols/overview/treeview.asp



1.下面的為轉(zhuǎn)載:

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下創(chuàng)建空目錄webctrl_client\1_0。
(3)將build\Runtime下的文件拷至webctrl_client\1_0下。
(4)選擇工具箱的自定義工具箱,添加Microsoft.Web.UI.WebControls.dll。
有些麻煩
但如果你能找到后綴是msi的自動安裝版本,直接下一步就行(我一直用這個版本,hoho)
安裝后,通過“自定義工具箱”->“.net框架組件”把TreeView添加到工具箱里

2.運行時無法顯示
一般是TreeView的版本問題,最好下載英文版自動安裝版本重新安裝,安裝前應(yīng)該先到添加刪除程序里卸掉原版本

3.顯示格式出錯(非樹狀顯示)
TreeView要求客戶端瀏覽器版本為IE5.5及以上,最好要求客戶端升級為IE6.0

4.框架里使用TreeView
設(shè)置NavigateUrl、Target屬性,可更新另外的Frame

5.找不到TreeNode類
使用TreeView,最好添加namespace:using Microsoft.Web.UI.WebControls;

6.遍歷TreeView節(jié)點(遞歸算法)
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結(jié)點的父節(jié)點
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.展開時不提交,改變選擇節(jié)點時才提交
將autopostback設(shè)置成false; 
在body里添加  <body  onload="initTree()"> 
然后在PageLoad里寫: 
string  strTreeName  =  "TreeView1"; 
string  strRef  =  Page.GetPostBackEventReference(TreeView1); 
string  strScript  =  "<script  language=\"JavaScript\">  \n"  +  "<!--  \n"  +  "            function  initTree()  {  \n"  +"                        "  +  strTreeName  +  ".onSelectedIndexChange  =  function()  {  \n"  +    "if  (event.oldTreeNodeIndex  !=   
event.newTreeNodeIndex)  \n"  +  "this.queueEvent(‘onselectedindexchange‘,  event.oldTreeNodeIndex  +  ‘,‘  +  event.newTreeNodeIndex);  \n"  +    "window.setTimeout(‘"  +  strRef.Replace("‘","\\‘")    +  "‘,  0,  ‘JavaScript‘);  \n"  +    "                        }  \n"  +      "            }  \n"  +    "http://  -->  \n"  +  "</script>"; 
Page.RegisterClientScriptBlock("InitTree",strScript  ); 
 
這樣就只有你點擊的節(jié)點更改的時候才提交!

10.TreeView結(jié)合XML
把XML文件設(shè)置為如下格式,然后直接設(shè)置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();

 11.請問,在頁面加載時,如何選中Treeview某一節(jié)點?

index屬性,是一個如1.1.0的東西,解析這個字符串,然后定位

private void ExpandNode(string selID)//selID like 1.1.0
{
 char[] mySplit = new char[]{‘.‘};
 string [] nodeArray = selID.Split(mySplit);

 TreeNode myNode = null;
 for(int i=0;i<nodeArray.Length;i++)
 {
  if(i==0)
   myNode = tree.Nodes[Convert.ToInt32(nodeArray[i])];
  else
   myNode = myNode.Nodes[Convert.ToInt32(nodeArray[i])];

  myNode.Expanded = true;  
  tree.SelectedNodeIndex = myNode.GetNodeIndex();
 }   
}

 

客戶端控制TreeView
http://expert.csdn.net/Expert/topic/1382/1382892.xml

1.設(shè)置所選節(jié)點,如選中第二個節(jié)點
function SetSelNode()
{
 TreeView1.selectedNodeIndex="1";
}

2.得到所選節(jié)點的Text,ID或NodeData
function GetAttribute()
{
 alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text"));
}
替換Text為ID或NodeData,可分別得到所選節(jié)點的ID或NodeData

3.修改節(jié)點屬性,如修改第一個節(jié)點的Text
function ModifyNode()
{
 var node=TreeView1.getTreeNode("0");
 node.setAttribute("Text","hgknight");
}

4.得到點擊節(jié)點
function TreeView1.onclick()
{
 alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("Text"));
}

5.添加節(jié)點
function AddNode()
{
 var node=TreeView1.createTreeNode();
 node.setAttribute("Text","hgknight");
 TreeView1.add(node);   
}

6.js遍歷所有節(jié)點
 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());   
   }
  }
 }

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

<iewc:treeview id="TreeView1" runat="server" wilth="100%" AutoSelect="True" BorderWidth="2px" Target="main"
ExpandedImageUrl="images/fopen.gif" SelectedImageUrl="images/bookmark.gif" ImageUrl="images/fclose.gif"
BorderColor="AliceBlue" BackColor="#ffffcc" SystemImagesPath="../webctrl_client/1_0/treeimages/"
SelectExpands="True" ExpandLevel="1"></iewc:treeview>
-----------------

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.Web.UI.WebControls;
namespace aspnetc.admin
{
/// <summary>
/// left 的摘要說明。
/// </summary>
public class left : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lblName;
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
protected System.Web.UI.WebControls.HyperLink hlkLogOut;
protected System.Web.UI.WebControls.Label Label2;

ClassConn connE = new ClassConn();

private void Page_Load(object sender, System.EventArgs e)
{
// 在此處放置用戶代碼以初始化頁面
if (!IsPostBack)
{
lblName.Text=Session["userName"]!=null ? Session["userName"].ToString():string.Empty;
try
{
//添加命令,從數(shù)據(jù)庫中得到數(shù)據(jù)
SqlDataAdapter ada = new SqlDataAdapter("select * from menues where state=1 order by sortIndex",connE.GetConn());
DataSet ds=new DataSet();
ada.Fill(ds);
this.ViewState["ds"]=ds;
}
catch (Exception ex)
{
throw (ex);  
}
finally
{
connE.Close();
}
//調(diào)用遞歸函數(shù),完成樹形結(jié)構(gòu)的生成
AddTree(0, (TreeNode)null);
}
}

#region Web 窗體設(shè)計器生成的代碼
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 該調(diào)用是 ASP.NET Web 窗體設(shè)計器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 設(shè)計器支持所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內(nèi)容。
/// </summary>
private void InitializeComponent()
{   
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

/// <summary>
///  遞歸添加樹的節(jié)點
/// </summary>
/// <param name="ParentID"></param>
/// <param name="pNode"></param>
public void AddTree(int ParentID,TreeNode pNode)
{
DataSet ds=(DataSet) this.ViewState["ds"];
DataView dvTree = new DataView(ds.Tables[0]);
//過濾ParentID,得到當前的所有子節(jié)點
dvTree.RowFilter =  "[parentId] = " + ParentID;

foreach(DataRowView Row in dvTree)
{
TreeNode Node=new TreeNode() ;
if(pNode == null)
{    //添加根節(jié)點
Node.Text = Row["name"].ToString();
TreeView1.Nodes.Add(Node);
//Node.Expanded=false;//是否展開若設(shè)置為true 則ExpandLevel="1"無效
AddTree(Int32.Parse(Row["ID"].ToString()), Node);    //再次遞歸
}
else

if(4>3)
{
//添加當前節(jié)點的子節(jié)點
Node.Text = Row["name"].ToString();
//Node.Target = mainFrame;
Node.NavigateUrl = Row["url"].ToString();
pNode.Nodes.Add(Node);
//Node.Expanded = false;
AddTree(Int32.Parse(Row["ID"].ToString()),Node);     //再次遞歸
}
}
}                  
}           
   

}
}
----------------------------------------------------------------------------------------------------------------------------------------

http://www.microsoft.com/china/MSDN/library/archives/library/DNAspp/html/aspnet-usingtreeviewieWebcontrol.asp


 IEWebControl TreeView右鍵菜單實例     選擇自 hgknight 的 Blog

一個IEWebControl TreeView右鍵菜單的例子,實現(xiàn)了添加、修改和刪除功能,復(fù)制即可運行
更多TreeView的客戶端操作參見
http://www.csdn.net/Develop/read_article.asp?id=22100

<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<HTML>
 <HEAD>
  <title>TreeView控件右鍵菜單</title>
  <style>
  <!--
   .skin
   {
   cursor:default;
   font:menutext;
   position:absolute;
   text-align:left;
   font-family: Arial, Helvetica, sans-serif;
   font-size: 10pt;
   width:120px;
   background-color:menu;
   border:1 solid buttonface;
   visibility:hidden;
   border:2 outset buttonhighlight;
   }
   .menuitems
   {
   padding-left:15px;
   padding-right:10px;
   }
   -->
  </style>
 </HEAD>
 <body onclick="hideMenu()">
  <form id="TreeView" method="post" runat="server">
   <iewc:TreeView id="TreeView1" runat="server" ExpandLevel="3" HoverStyle="color:blue;background:#ffff00;">
    <iewc:TreeNode Text="Node0" Expanded="True">
     <iewc:TreeNode Text="Node3">
      <iewc:TreeNode Text="Node5"></iewc:TreeNode>
      <iewc:TreeNode Text="Node6"></iewc:TreeNode>
     </iewc:TreeNode>
     <iewc:TreeNode Text="Node4"></iewc:TreeNode>
    </iewc:TreeNode>
    <iewc:TreeNode Text="Node1" Expanded="True">
     <iewc:TreeNode Text="Node7">
      <iewc:TreeNode Text="Node8"></iewc:TreeNode>
     </iewc:TreeNode>
    </iewc:TreeNode>
    <iewc:TreeNode Text="Node2" Expanded="True">
     <iewc:TreeNode Text="Node9"></iewc:TreeNode>
     <iewc:TreeNode Text="Node10">
      <iewc:TreeNode Text="Node11"></iewc:TreeNode>
      <iewc:TreeNode Text="Node12"></iewc:TreeNode>
     </iewc:TreeNode>
    </iewc:TreeNode>
   </iewc:TreeView>
   <div id="popupMenu" class="skin" onMouseover="highlighItem()" onMouseout="lowlightItem()" onClick="clickItem()">
    <div class="menuitems" func="add">添加</div>
    <hr>
    <div class="menuitems" func="delete">刪除</div>
    <div class="menuitems" func="modify">修改</div>
   </div>
  </form>
  <script language="javascript">
   var menuskin = "skin";
   var node = null;

   function hideMenu()
   {
    popupMenu.style.visibility = "hidden";
   }

   function highlighItem()
   {
    if (event.srcElement.className == "menuitems")
    {
     event.srcElement.style.backgroundColor = "highlight";
     event.srcElement.style.color = "white";
    }
   }

   function lowlightItem()
   {
    if (event.srcElement.className == "menuitems")
    {
     event.srcElement.style.backgroundColor = "";
     event.srcElement.style.color = "black";
     window.status = "";
    }
   }

   function clickItem()
   {    
    if (event.srcElement.className == "menuitems")
    {
     if(event.srcElement.getAttribute("func") == "add" && node != null)
     {
      var newNode=TreeView1.createTreeNode();
      newNode.setAttribute("Text","new Node");
      node.add(newNode);
     }
     else if (event.srcElement.getAttribute("func") == "delete" && node != null)
     {
      node.remove();
     }
     else if (event.srcElement.getAttribute("func") == "modify" && node != null)
     {
      node.setAttribute("Text","hgknight");
     }
    }
   }
   
   function TreeView1.oncontextmenu()
   {
    var nodeindex = event.treeNodeIndex;
    if (typeof(nodeindex) == "undefined")
    {
     node = null;
     return;
    }
    
    node = TreeView1.getTreeNode(nodeindex);
    
    var rightedge = document.body.clientWidth-event.clientX;
    var bottomedge = document.body.clientHeight-event.clientY;
    if (rightedge <popupMenu.offsetWidth)
    {
     popupMenu.style.left = document.body.scrollLeft + event.clientX - popupMenu.offsetWidth;
    }
    else
    {
     popupMenu.style.left = document.body.scrollLeft + event.clientX;
    }
    if (bottomedge <popupMenu.offsetHeight)
    {
     popupMenu.style.top = document.body.scrollTop + event.clientY - popupMenu.offsetHeight;
    }
    else
    {
     popupMenu.style.top = document.body.scrollTop + event.clientY;
    }
    popupMenu.style.visibility = "visible";
    return false;
   } 
   
  </script>
 </body>
</HTML>
-----------------------------------------------------------------------------
服務(wù)器端選擇一節(jié)點下所有子節(jié)點(先選擇再CHECK,麻煩)
private void TreeView1_Check(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
  {
   Microsoft.Web.UI.WebControls.TreeNode node=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex.ToString());
   //connE.Alert(node.NodeData.ToString(),Page);
   SetAllNodeData(node.Nodes);
  }

  private void  SetAllNodeData(TreeNodeCollection tnc)
  { 
   
   foreach(TreeNode node in tnc)
   {
    if(node.Nodes.Count!=0)
    {
     SetAllNodeData(node.Nodes);
    }
    if (node.Checked)
    {
     node.Checked = false;
    }
    else
    {
     node.Checked = true;
    }
 
   }
  }

Microsfot.Web.UI.WebControls.TreeView JavaScript控制方法研究
http://caidaoli.cnblogs.com/archive/2005/02/23/108317.html?Pending=true#Post

  1. 被選擇的節(jié)點的索引:
    tree.selectedNodeIndex

  2. 被單擊的節(jié)點的索引:
    tree.clickedNodeIndex

  3. 獲取一個節(jié)點:
    tree.getTreeNode(nodeIndex)

  4. 在根節(jié)點下增加一個子節(jié)點:
    var tree = document.all[‘TreeView1‘];
    var node = tree.createTreeNode() ;
    tree.add(node);
    node.setAttribute( "text", "aaaa");

  5. 在當前節(jié)點下增加一個子節(jié)點:
    var tree = document.all[‘TreeView1‘];
    var node = tree.createTreeNode() ;
    var parentNode = tree.getTreeNode( tree.clickedNodeIndex);
    parentNode.add(node);
    node.setAttribute( "text", "aaaa");

  6. 通過XML文件來增加子節(jié)點:
    node.setAttribute("NavigateUrl","xxx");
    node.databind();
  7. 動態(tài)增加子節(jié)點后自動展開:
    node.setAttribute(‘expanded‘, ‘true‘);//MS提供的HTC中需要修改一個地方,否則就會產(chǎn)生一個異常
  8. 獲取節(jié)點的屬性:
    node.getAttribute("xxx")
  9. 設(shè)置節(jié)點的屬性 :
    node.setAttribute(‘xxx‘, ‘xxxx‘);
    1. 常用屬性列表:
    1. 屬性
    含義
    CheckBox True False 是否有選擇框
    checked True False 選擇框是否被選中
    Expanded True False 是否展開
    ImageURL   正常狀態(tài)下左邊的圖標
    SelectedImageUrl   當節(jié)點被選擇時左邊的圖標
    ExpandedImageUrl   當節(jié)點被展開后左邊的圖標
    Target   目標框架
    navigateurl   目標URL
    type   節(jié)點的類型
    childtype   子節(jié)點的類型
    Text   節(jié)點顯示的文本
    innerText    
    innerHTML    
    defaultstyle   默認的風格
    hoverstyle   當鼠標移到節(jié)點的上面時的風格
    selectedstyle   當節(jié)點被選擇時的風格
    treenodesrc    
    1. 獲取父節(jié)點:
      node.getParent()
    2. 獲取子節(jié)點:
      node.getChildren()
    3. 判斷節(jié)點是否有子節(jié)點
      node.getChildren().length > 0
    4. 響應(yīng)onselectedindexchange事件:
      var tree = document.all["tvMain"];
      tree.attachEvent("onselectedindexchange", SelectedIndexChange);

  • posted on 2006-09-28 15:57 yyf 閱讀(510) 評論(3)  編輯  收藏 所屬分類: C#1.0、ASP.NET(1.X)技術(shù)(轉(zhuǎn)載)
    #1樓 

    評論

    #1樓  2007-03-28 17:13 wei [未注冊用戶]
    我是一個新手,想設(shè)計一個網(wǎng)站,用ASP.net+VB, 頁面左邊是一個TREEVIEW,用來顯示幾個人名,右邊是一個IMG,用來顯示人物圖片的。當點擊左邊的人名時,右邊顯示該人的詳細資料。但是用了幾 天,都無法取得響應(yīng)用戶點擊的方法,請求如何用。急急急
    Protected Sub TreeView1_BeforeSelect(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TreeView1.BeforeSelect
    Select Case e.Text
    Case "郭行"
    Image2.ImageUrl = "~/pic/pic_gx.jpg"
    ( ...........)
    case "張東亮"
          Image2.ImageUrl = "~/pic/pic_zdl.jpg"

    End Select


    End Sub
      回復(fù)  引用  查看    

    #2樓  2007-03-28 17:56 wei [未注冊用戶]
    我是一個新手,想設(shè)計一個網(wǎng)站,用ASP.net+VB, 頁面左邊是一個TREEVIEW,用來顯示幾個人名,右邊

    是一個IMG,用來顯示人物圖片的。當點擊左邊的人名時,右邊顯示該人的詳細資料。但是用了幾天,都

    無法取得響應(yīng)用戶點擊的方法,請求如何用。急急急
    以下段編譯總是出錯?。。?!
    Protected Sub TreeView1_BeforeSelect(ByVal sender As System.Object, ByVal e As

    System.EventArgs) Handles TreeView1.BeforeSelect
    Select Case e.Text
    Case "郭行"
    Image2.ImageUrl = "~/pic/pic_gx.jpg"
    ( ...........)
    case "張東亮"
          Image2.ImageUrl = "~/pic/pic_zdl.jpg"

    End Select


    End Sub

      回復(fù)  引用  查看    

    #3樓  2007-04-10 14:49 yyf919 [未注冊用戶]
    如果你用的是微軟的TreeView,那么你要讓TreeView的可以回發(fā)的屬性設(shè)置設(shè)置為True,然后在后臺才能捕獲到客戶端的點擊事件。(僅供參考)
      回復(fù)  引用  查看    

      本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
      轉(zhuǎn)藏 分享 獻花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多