winform技巧—TreeView控件使用

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

这样就只有你点击的节点更改的时候才提交!

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinFormTreeView控件是一个用于显示层次结构数据的控件,通常用于创建树形菜单或文件资源管理器等应用程序。它允许用户展开和折叠节点,并可以通过选择节点来执行相应的操作。 以下是一个简单的示例,演示如何使用WinFormTreeView控件: ```csharp using System; using System.Windows.Forms; namespace TreeViewDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // 添加根节点 TreeNode rootNode = new TreeNode("根节点"); treeView1.Nodes.Add(rootNode); // 添加子节点 TreeNode childNode1 = new TreeNode("子节点1"); TreeNode childNode2 = new TreeNode("子节点2"); rootNode.Nodes.Add(childNode1); rootNode.Nodes.Add(childNode2); // 添加子节点的子节点 TreeNode grandChildNode1 = new TreeNode("子节点1的子节点1"); TreeNode grandChildNode2 = new TreeNode("子节点1的子节点2"); childNode1.Nodes.Add(grandChildNode1); childNode1.Nodes.Add(grandChildNode2); } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { // 在选节点后执行的操作 MessageBox.Show("选节点:" + e.Node.Text); } } } ``` 在上述示例,我们创建了一个名为"根节点"的根节点,并添加了两个子节点"子节点1"和"子节点2"。"子节点1"又有两个子节点"子节点1的子节点1"和"子节点1的子节点2"。当用户选择某个节点时,会弹出一个消息框显示选的节点文本。 请注意,上述示例是一个简单的演示,你可以根据自己的需求进行更复杂的操作和定制化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值