winform技巧—TreeView控制項使用

來源:互聯網
上載者:User
TreeView控制項
功能
TreeView控制項可為使用者顯示節點階層,和在Windows作業系統的資源管理員的左窗格中顯示檔案和檔案夾一樣。樹視圖中的各個節點都可以包含其他節點。使用者可以按展開或摺疊的方式顯示父節點或包含子節點的節點。另外,通過將樹視圖的CheckBoxes屬性設定為True,可以在節點旁邊顯示複選框,使用者可以通過將節點的Checked屬性設定為True或False來選中或清除節點。
2.屬性
TreeView控制項常用屬性及說明如表1所示。

表1       TreeView控制項常用屬性及說明
下面詳細介紹Nodes屬性,該屬性用於設定TreeView控制項中的所有節點。
文法:
public TreeNodeCollection Nodes { get; }
屬性值:TreeNodeCollection,表示分配給樹狀檢視控制項的樹節點。-------------------------------------------------------------------------當前選中項:TreeView.SelectedNode 

增加頂級節點:TreeView.Nodes.Add("Key", "Text") 

增加同級節點:TreeView.SelectedNode.Parent.Nodes.Add("Key", "Text") 

增加子節點:TreeView.SelectedNode.Nodes.Add("Key", "Text") 

全部展開:TreeView.ExpandAll() 

全部收攏:TreeView.CollapseAll() 

重新設定TreeView 

資料庫表結構為: ID 類型名稱 父級ID 
複製代碼代碼如下:

private void loadTreeView() 



this.貨品類別TableAdapter1.Fill(superCargoDataSet1.貨品類別); 

DataTable table = superCargoDataSet1.貨品類別; 

DataRow[] row = table.Select("父級ID=0"); 

foreach (DataRow r in row) 



TreeNode node = 貨品類別TreeView.Nodes.Add(r["ID"].ToString(), r["類型名稱"].ToString()); 

recursionShow(node, r["ID"].ToString()); 





private void recursionShow(TreeNode nodes, string id) 



DataTable table = superCargoDataSet1.貨品類別; 

DataRow[] row = table.Select("父級ID=" + id); 

if (row != null) 



foreach (DataRow r in row) 



TreeNode node = nodes.Nodes.Add(r["ID"].ToString(), r["類型名稱"].ToString()); 

recursionShow(node, r["ID"].ToString()); 








刪除選中節點和其子結點,同時刪除資料庫中相應記錄 

資料庫表結構為: ID 類型名稱 父級ID 
複製代碼代碼如下:

private void 刪除ToolStripButton_Click(object sender, EventArgs e) 



if (貨品類別TreeView.SelectedNode != null) 



DataRow[] rowChildren = superCargoDataSet1.貨品類別.Select("ID=" + 貨品類別TreeView.SelectedNode.Name.ToString()); 

if (rowChildren != null) 



foreach (DataRow row in rowChildren) 



delete節點(row["ID"].ToString()); 

row.Delete(); 





貨品類別TreeView.SelectedNode.Remove(); 





private void delete節點(string id) 



DataRow[] rowChildren = superCargoDataSet1.貨品類別.Select("父級ID=" + id); 

if (rowChildren != null) 



foreach (DataRow row in rowChildren) 



delete節點(row["ID"].ToString()); 

row.Delete(); 








TreeView右鍵選中 
複製代碼代碼如下:

private void treeView左側_MouseDown( object sender , MouseEventArgs e ) 



if( e.Button == MouseButtons.Right ) 



TreeNode node = treeView左側.GetNodeAt (e.X , e.Y); 

if( node != null )//右鍵未選中節點,不改變當前選中的節點。VS2005如此。 



this.treeView左側.SelectedNode = node; 





遍曆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 + " ");
 }
}

得到node結點的父節點
TreeNode pnode;
if(node.Parent is TreeNode)
 pnode=(TreeNode)node.Parent;
else
 //node is root node

修改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";

展開時不提交,改變選擇節點時才提交
將autopostback設定成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"  +    "//  -->  /n"  +  "</script>";  
Page.RegisterClientScriptBlock("InitTree",strScript  );  
 
這樣就只有你點擊的節點更改的時候才提交!

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();

 

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());    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.