首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

winform技艺—TreeView控件使用

2012-08-13 
winform技巧—TreeView控件使用TreeView控件功能TreeView控件可为用户显示节点层次结构,和在Windows操作系

winform技巧—TreeView控件使用
TreeView控件
功能
TreeView控件可为用户显示节点层次结构,和在Windows操作系统的资源管理器的左窗格中显示文件和文件夹一样。树视图中的各个节点都可以包含其他节点。用户可以按展开或折叠的方式显示父节点或包含子节点的节点。另外,通过将树视图的CheckBoxes属性设置为True,可以在节点旁边显示复选框,用户可以通过将节点的Checked属性设置为True或False来选中或清除节点。
2.属性
TreeView控件常用属性及说明如表1所示。
winform技艺—TreeView控件使用
表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());    



热点排行