treeview 控件使用和数据绑定
一、TreeViewe 是由多个类来定义的,TreeView组件是由命名空间“System.Windows.Froms”中的“TreeView”类来定义的,而其中的节点(即Node),是由命名空间“System.Windows.Froms”中的“TreeNode”来定义的。所以在程序中创建一个TreeVirew对象,其实只是创建了一个可以防止检点的“容器”。而在这个容器中加入一个节点,其实就是加入了从“TreeNode”类中创建的一个节点对象;同样删除一个节点,也就是删除一个“TreeNode”对象。
二、 C#操作TreeView组件中的一些常用方法以及具体实现:
可以总结为三种基本操作:加入子节点、加入兄弟节点和删除节点
1.加入子节点
所谓子节点,就是处于选定节点的下一级节点。加入子节点的具体过程是:首先要在TreeView组件中定位要加入的子节点的位置,然后创建一个节点对象,然后利用TreeVeiw类中对节点的加入方法(即:Add ( )方法),加入此节点对象。下面就是在treeView1组件中加入一个子节点的具体代码:
//首先判断是否选定组件中的位置if (treeView1.SelectedNode == null){MessageBox.Show("请选择一个节点", "提示信息",MessageBoxButtons.OK, MessageBoxIcon.Information);}else{//创建一个节点对象,并初始化TreeNode tmp;tmp = new TreeNode("节点名称");//在TreeView组件中加入子节点treeView1.SelectedNode.Nodes.Add(tmp);treeView1.SelectedNode = tmp;treeView1.ExpandAll();}
2.加入兄弟节点
所谓兄弟节点,就是在选定的节点的平级的节点。加入兄弟节点的方法和加入子节点的方法基本一致,只是在最后的实现方法上有着略微的区别。加入兄弟节点的具体步骤,首先也是要确定要加入的兄弟节点所处的位置,接着定义一个节点对象,最后调用TreeView类中对兄弟节点加入的方法,加入此节点对象。加入兄弟节点和加入子节点的最大区别就在于这最后一步。希望读者能够注意。下面是在TreeView组件加入一个兄弟节点的具体代码:
//首先判断是否选定组件中节点的位置if (treeView1.SelectedNode == null){MessageBox.Show("请选择一个节点", "提示信息",MessageBoxButtons.OK, MessageBoxIcon.Information);}else{//创建一个节点对象,并初始化TreeNode tmp;tmp = new TreeNode(textBox1.Text);//在TreeView组件中加入兄弟节点treeView1.SelectedNode.Parent.Nodes.Add(tmp);treeView1.ExpandAll();}
3.删除节点
删除节点就是删除TreeView组件中选定的节点,删除节点可以是子节点,也可以是兄弟节点,但无论节点的性质如何,必须保证要删除的节点没有下一级节点,否则必须先删除此节点中的所有下一级节点,然后再删除此节点。删除节点比起上面的二个操作要显得略微简单,具体方法是:首先判断要删除的节点是否存在下一级节点,如果不存在,就调用TreeView类中的Remove ( )方法,就可以删除节点了。下面是删除TreeView组件中节点的具体代码:
//判断选定的节点是否存在下一级节点
if ( treeView1.SelectedNode.Nodes.Count == 0 )
//删除节点
treeView1.SelectedNode.Remove ( ) ;
else
MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信
息" , MessageBoxButtons.OK ,
MessageBoxIcon.Information ) ;
4.TreeView组件的一些其他常用操作:
< I > .展开所有节点:
要展开TreeView组件中的所有节点,首先就要把选定的节点指针定位在TreeView组件的根节点上,然后调用选定组件的ExpandAll方法就可以了,下面是具体代码:
//定位根节点
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//展开组件中的所有节点
treeView1.SelectedNode.ExpandAll ( ) ;
< II > .展开选定节点的下一级节点:
由于只是展开下一级节点,所以就没有必要用ExpandAll ( )方法了。展开下一级节点只需要调用Expand ( )方法就可以了,下面是具体的实现代码:
treeView1.SelectedNode.Expand ( ) ;
< III > .折叠所有节点:
折叠所有节点和展开所有节点是一组互操作,具体实现的思路也大致相同,折叠所有节点也是首先要把选定的节点指针定位在根节点上,然后调用选定组件的Collapse ( )就可以了,下面是具体的实现代码:
//定位根节点
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//折叠组件中所有节点
treeView1.SelectedNode.Collapse ( ) ;
三、实例
using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows .Forms ;
using System.Data ;
namespace 全面掌握TreeView组件的使用方法
{/// Form1 的摘要说明。public class Form1 : Form{private TreeView treeView1 ;private Button button1 ;private Button button2 ;private Button button3 ;private MenuItem menuItem2 ;private MenuItem menuItem3 ;private MenuItem menuItem4 ;private ContextMenu contextMenu1 ;private TextBox textBox1 ;private Label label1 ;/// 必需的设计器变量。private System.ComponentModel.Container components = null ;public Form1 ( ){//初始化窗体中的组件InitializeComponent ( ) ;}/// 清理所有正在使用的资源。protected override void Dispose ( bool disposing ){if ( disposing ){if ( components != null ){components.Dispose ( ) ;}}base.Dispose ( disposing ) ;}private void InitializeComponent ( ){//初始化代码(略)}[ STAThread ]static void Main ( ){Application.Run ( new Form1 ( ) ) ;}private void AddChildNode ( ){//首先判断是否选定组件中的位置if ( treeView1.SelectedNode == null ){MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;}else{if ( textBox1.Text != "" ){//创建一个节点对象,并初始化TreeNode tmp ;tmp = new TreeNode ( textBox1.Text ) ;//在TreeView组件中加入子节点treeView1.SelectedNode.Nodes.Add ( tmp ) ;treeView1.SelectedNode = tmp ;treeView1.ExpandAll ( ) ;}else{MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;return ;}}}private void AddParent ( ){//首先判断是否选定组件中节点的位置if ( treeView1.SelectedNode == null ){MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;}else{if ( textBox1.Text != "" ){//创建一个节点对象,并初始化TreeNode tmp ;tmp = new TreeNode ( textBox1.Text ) ;//在TreeView组件中加入兄弟节点treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;treeView1.ExpandAll ( ) ;}else{MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;return ;}}TreeNode tnode = new TreeNode ( textBox1.Text ) ;}private void treeView1_MouseDown ( object sender , MouseEventArgs e ){if ( e.Button == MouseButtons.Right )contextMenu1.Show ( this , new Point ( e.X , e.Y ) ) ;}private void button1_Click ( object sender , System.EventArgs e ){treeView1.SelectedNode.Expand ( ) ;}private void menuItem2_Click ( object sender , System.EventArgs e ){AddChildNode ( ) ;}private void menuItem3_Click ( object sender , System.EventArgs e ){AddParent ( ) ;}private void menuItem4_Click ( object sender , System.EventArgs e ){//判断选定的节点是否存在下一级节点if ( treeView1.SelectedNode.Nodes.Count == 0 )//删除节点treeView1.SelectedNode.Remove ( ) ;elseMessageBox.Show ( "请先删除此节点中的子节点!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;}private void button2_Click ( object sender , System.EventArgs e ){//定位根节点treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;//展开组件中的所有节点treeView1.SelectedNode.ExpandAll ( ) ;}private void button3_Click ( object sender , System.EventArgs e ){//定位根节点treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;//折叠组件中所有节点treeView1.SelectedNode.Collapse ( ) ;}}
}
四、数据绑定
默认展开树的级别;0是不展开;1是展开一级;
1.递归法
public partial class _Default : System.Web.UI.Page
{private void LoadTree(TreeNode parentNode){List<ChinaStates> list = new chinabf().selectByCode(parentNode.Value);if (list.Count == 0){return;}foreach (ChinaStates item in list){TreeNode childNode = new TreeNode();childNode.Text = item.AreaName;childNode.Value = item.AreaCode;parentNode.ChildNodes.Add(childNode);LoadTree(childNode);}}protected void Page_Load(object sender, EventArgs e){TreeNode root = new TreeNode();root.Text = "中国";root.Value = "0001";TreeView1.Nodes.Add(root);LoadTree(root);}
}
2.for嵌套
public void treeBind()
{TreeNode root = new TreeNode();root.Text = "汉企数据通软件有限公司";root.Value = "H001";root.SelectAction = TreeNodeSelectAction.None;TreeView1.Nodes.Add(root);List<Department> list = new Function().SelectPart();List<Worker> data=new List<Worker>();foreach (Department item in list){TreeNode firstNode = new TreeNode();firstNode.Text = item.Department1;firstNode.Value = item.DepartCode;firstNode.SelectAction = TreeNodeSelectAction.None;root.ChildNodes.Add(firstNode);List<Worker>arr= new Function().SelectWorker(item.Department1);foreach (Worker workers in arr){TreeNode child = new TreeNode();child.Text = workers.Wname;child.Value = workers.Wid.ToString();child.SelectAction = TreeNodeSelectAction.None;firstNode.ChildNodes.Add(child);}}
}
3.遍历所有子节点,找出选中项
protected void Button1_Click(object sender, EventArgs e)
{List<TreeNode> listNodes = new List<TreeNode>();foreach (TreeNode node in TreeView1.Nodes){if (node != null){FindCheckNode(node, listNodes);}else{return;}}
}private void FindCheckNode(TreeNode node, List<TreeNode> listNodes)
{if (node.Checked){listNodes.Add(node);}foreach (TreeNode childnode in node.ChildNodes){FindCheckNode(childnode, listNodes);}
}
转载于:https://www.cnblogs.com/shaobing012/p/4877789.html
treeview 控件使用和数据绑定相关推荐
- dev treeview控件_在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件
DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一 ...
- matlab treeview,treeview控件
高分在线等:C#中如何给treeview控件上的节点前添比如有一treeview1控件,需要在其所有节点前均加一静态小图标(所有节点我也新手,正好刚用过这功能.如下: 1. 到工具箱中拖一个image ...
- 网站导航(TreeView 控件)
TreeView 是让人印象最深刻的导航控件之一,不仅因为它允许呈现富树视图,还因为它支持按需填入树的部分(不需要刷新整个页面).但最重要的是,它支持很多样式来改变它的外观. 通过几个基本的属性,可以 ...
- WPF 控件专题 TreeView控件详解
1.TreeView介绍 命名空间:System.Windows.Controls TreeView 表示一个控件,该控件在树结构(其中的项可以展开和折叠)中显示分层数据. TreeView 是一个 ...
- java treeview控件,来自treeview控件的绑定错误
我遇到了一个问题,如果你能为此提供任何建议,我将非常感激 . 错误信息: System.Windows.Data错误:4:无法找到绑定源,引用'RelativeSource FindAncestor, ...
- C# 在DataGridView中,点击单元格调出 TreeView控件 或 ListBox控件
1.调出 TreeView控件 或 ListBox控件 private void deductGrid1_CellClick(object sender, DataGridViewCellEvent ...
- 递归遍历文件夹,并添加到TreeView控件中
遍历文件夹,并把所有节点增加到TreeView控件中,这里单独写成了一个静态类,传入根目录节点和指定的目录这两个参数即可,可以稍作扩展用于其他方案 View Code 1 using System; ...
- WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色
WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色 在B/S开发中,对TreeView控件要改变当前选中节点的颜色比较方便,其有相应的SelectedNodeChanged事件 ...
- C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标
在C#系统应用毕设U盘防御软件中需要实现文件不可恢复的删除,首先需要实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录并加载相应图标.显示结果 ...
最新文章
- java 匿名list,java创造匿名对象的两种方法
- 【树形DP】树的重心详解+多组例题详解
- Active Directory还原工具之三Software Active Directory Recycle Bin PowerPack
- 李春平:钱不是奥黛莉赫本给的
- mysql的慢查询日志功能_MySQL 慢查询日志
- 软件公司与非软件公司区别(纯个人看法)
- 爱晚红枫的博客配色----绿野仙踪
- Java学习笔记_方法
- C++ 字符串指针和字符串指针数组详解
- 【服务器实战搭建】centos7下使用yum安装mysql
- 祝福神器!微信推出“表情搜索”功能,支持合成个性化祝福表情
- 软件获取imei和imsi_获取设备信息(imei、imsi、uuid)的调整使用plus.device.getInfo方法的说明...
- 0/0型极限等于多少_两个重要极限的一点理解(下)
- 大功率mos管怎么测量好坏,如何用万用表判断mos管的好坏?够全面!
- 银行贷款违约风险预测
- UEFI(使用EDK2)编程
- 青软新获「2022年度山东省软件和信息技术服务业综合竞争力百强企业」等三项荣誉!
- AVG神作是如何炼成的? 《逆转裁判》成步堂三部曲解析
- C++中编写自己的头文件
- ebay架构师总结伸缩性要旨!!
热门文章
- HttpClient4文件上传
- 给网站外链进行重定向跳转
- android ORM框架的性能简单测试(androrm vs ormlite)
- ubuntu12.04循环登录,无法进桌面的问题。
- SourceInsight下面一直出现unable to write to temp file for saving operation 这样的提示
- opencv处理视频颠倒问题
- android 8.1.0怎么截屏,vivo Z1i怎么截屏?4种vivo Z1i截图方法
- 一致 先验分布 后验分布_「分布式技术」分布式事务最终一致性解决方案,下篇...
- 云服务器在哪里创建网站目录,如何在云服务器创建根目录
- Angular项目构建指南 - 不再为angular构建而犹豫不决