相信只要你仔細閱讀了這篇小菜文,並參考一下提供的例程,一定能夠掌握TREE的基本用法!
1.工欲善其事,必先利其器。首先保證裝好你的組件,這個包安裝非常方便,只要運行一下即可在VS.NET的工具欄中找到並使用了:
http://218.56.11.178:8018/FileDown.aspx?FID=4
也可以關注一下官方站是否有新版發佈:
http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp
2.常用的幾個屬性和方法
~Index 獲取樹節點在樹節點集合中的位置。
~Nodes 獲取分配給樹視圖控件的樹節點集合。
~Parent 獲取或設置控件的父容器。
~SelectedNode 獲取或設置當前在樹視圖控件中選定的樹節點。
~ExpandAll 展開所有樹節點。
~Checked 獲取或設置一個值,用以指示樹節點是否處於選中狀態。
~Text 獲取或設置在樹節點標籤中顯示的文本。
~Expand 展開樹節點。
~Clear 清空樹
~Remove 從樹視圖控件中移除當前樹節點。
以上由其他網友總結,補充:
~Height 控件的高度
~Width 控件的寬度
~BackColor 背景顏色
~BorderColor 邊框顏色
~BorderStyle 邊框樣式
~BorderWidth 邊框寬度
~CssClass 應用於該控件的CSS類名
~ExpandedImageUrl 展開時顯示的節點圖標
~ImageUrl 未選擇或展開是顯示的節點圖標
~SelectedImageUrl 選中狀態下顯示的節點圖標
~Indent 縮進距離,只有在ShowLines設爲TRUE時才生效。
~ShowLines 是否顯示層級連接線
~ShowPlus 是否顯示+/-符號按鈕
~ShowToolTip 在有父節點上顯示工具提示(+/-號的使用展開/關閉)。
~AccseeKey 控件使用的鍵盤快捷鍵
~AutoSelect 爲TRUE時,當用鍵盤移動節點時,自動選擇新節點
~AutoPostBack 當改變狀態時,自動回存
~Enabled 控制控件的啓用狀態
~EnableViewState 控件是否自動保存其狀態以用於往返行程
~ExpandLevel 初始化控件是展開節點的層數
~SelectExpands 當選中一個接點時,是否自動展開該節點
~TabIndex TAB鍵次序
~Visible 控件是否可見
3.實用技巧:
1)怎樣點擊文字(不是+/-號)即可展開(收縮)子節點
將TREE的ShowToolTip 屬性設爲false即可。
2)當鼠標指到某父接點時,如何不顯示顯示“節點名:user +/- to expand/collapse”
將TREE的SelectExpands 屬性設爲TRUE即可。
3)不顯示樹型的問題
首先:控件包沒裝好,使用上邊介紹的控件包裝一下試試。
其次:TreeView要求客戶端瀏覽器版本爲IE5.5及以上,最好要求客戶端升級爲IE6.0
4)關於閃爍
將AutoPostBack屬性設置爲真,SelectedIndexChange才能被執行。不過這樣的話刷新的很厲害。不要刷新的話,將AutoPostBack屬性設置爲FALSE.
5)如何實現用鍵盤上下左右鍵移動焦點時,自動選擇新節點並執行新節點
將TREE的AutoSelect 屬性設爲TRUE即可。
6)不想顯示+/-符號按鈕怎麼做?
將TREE的ShowPlus 屬性設爲False即可。
7)不想顯示層級連接線怎麼做?
將TREE的ShowLines 屬性設爲False即可。
8)如何設置節點旁的圖標
~ExpandedImageUrl、ImageUrl、SelectedImageUrl這3個屬性是控制圖標的,選擇自己喜歡的就OK了。
4.看看這個例子,對你一定有啓發,是一棵無級樹,不過在實際使用中可能會有些麻煩:
http://218.56.11.178:8018/FileDown.aspx?FID=246
5.這個論壇也使用了樹(asp.net+C#+MSSQL 2000),並且代碼開放,,如果覺得有參考價值,不妨裝起來看看,其中還包含了其他一些常用的asp.net編程技巧,演示了TREE控件如何和數據庫結合,動態顯示庫中的數據,這棵樹只有兩層,不過比較實用:
http://218.56.11.178:8018/FileDown.aspx?FID=212
其中:tree.aspx、tree.aspx.cs是TREE控件使用的主要部分。
論壇的實際應用演示地址,在這裏:
http://expert.kaer.cn/
TreeView使用集錦 hgknight(原作)
原來在論壇裏發過專題帖子,只是由於帖子丟失原因,有些問題找不到了,同時這次也補充了一些,發到文檔區以方便查詢吧
原貼
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/"> /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" + "// --> /n" + "</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());
}
}
}
這裏是微軟的教程:http://www.microsoft.com/china/MSDN/library/archives/library/DNAspp/html/aspnet-usingtreeviewieWebcontrol.asp