新建一个WinForm项目之后,在窗体中放入一个treeView控件(treeView1),根据数据库数据填充建立树节点。数据库的结构如下:

ID        Title        P_ID

a          根节点           0

b          子节点1         a

c          子节点2         a

默认P_ID=0的节点为根节点a,下面有2个子节点b、c。

ID列为不重复的文本,在treeView1中表示TreeNode的Name属性;

Title列为普通文本,在treeView1中表示TreeNode的Text属性;

P_ID列为父ID,在treeView1中表示TreeNode的Tag属性。

一、用递归方法进行历遍添加所有节点到treeView1。

在WinForm的Load事件中载入并建立treeView1的节点,用了几个自定义的方法完成添加节点的操作:

private void CreatTree()
{
   TreeNode node = new TreeNode(); //定义根节点
   Model.getByPID("0"); //自定义的获取根节点的方法,并转为属性
   node.Name = Model.ID; //将类Model的各个属性赋值给根节点
   node.Text = Model.Title;
   node.Tag = Model.P_ID;
   treeView1.Nodes.Add(node);//将节点node作为treeView1的根节点
   cTree(node,node.Name); //调用另一个方法为根节点添加其他
   treeView1.ExpandAll(); //展开所有节点
}
private void cTree(TreeNode node,string ID)//当前节点,节点的ID

   node.Name = ID;
   DataTable table = PublicTools.AccessHelper.ExecuteDataTable("select * from CodeEditor where P_ID = @P_ID", new OleDbParameter("@P_ID", ID)); //用自定义的方法根据当前节点的ID查找所有子节点
foreach( DataRow row in table.Rows)//历遍所有子节点,赋值并添加
{
TreeNode n =new TreeNode();
n.Name = (string)row["ID"];
n.Text = (string)row["Title"];
    n.Tag  = (string)row["P_ID"];
     node.Nodes.Add(n);
cTree(n,n.Name); //用递归的方法添加完整的树节点
 }
}

二、处理一般的事件和设置

1、树节点的单击事件:treeView1_AfterSelect,代码:

//使节点标签可编辑
treeView1.LabelEdit = true;

2、树节点修改完成后事件:treeView1_AfterLabelEdit,代码:

//使节点标签不可编辑
treeView1.LabelEdit = false;

3、树节点失去焦点仍高亮的设置:

(1)

treeView1.HideSelection = false; //一般在完成树节点之后

(2)treeView1_DrawNode 事件:

e.DrawDefault = true;
//这里只是一个默认值,可添加重绘节点的具体代码

三、TreeView控件和TreeNode的常用成员:

AfterSelect //单击事件

TreeView.HideSelection = False;  //可让选中节点保持高亮

Node = TreeView.SelectedNode; //已选中的当前树节点

string I = treeView1.SelectedNode.Index.ToString()

//当前节点的索引值,由0开始,只限于同父、同级的节点集合

treeView1.SelectedNode.Text = “String”; //设置当前节点的文本

string String = treeView1.SelectedNode.Text; //获取当前节点的文本

treeView1.SelectedNode.FullPath.ToString();

//当前节点的全路径,从根节点开始到当前节点,由节点的Text属性加“\”连接而成的字符串,最后的节点后面没有“\”

treeView1.SelectedNode.Tag;

//当前节点的其他信息,可以是各种类型,也可以是对象

treeView1.SelectedNode.Name:树节点的名称,也是(TreeNodes集合)TreeNodeCollection 中该节点的键(key)

treeView1.SelectedNode.Parent; //当前树节点的父树节点。

treeView1.SelectedNode.Level; //树视图的深度(从零开始)

四、在treeView控件中,成员Nodes其实就是一个TreeNode的集合,所以也可以使用TreeNodeCollection的成员:

TreeNodeCollection 类,TreeNodes集合类

treeView1.Nodes.Add(字符串);

//以字符串为显示文本添加节点到树集合的末尾

treeView1.Nodes.Add(TreeNode);

//将现有的树节点添加到树节点集合的末尾。

treeView1.Nodes.Add(String, String):创建具有指定键和文本的新树节点,并将其添加到集合中。

treeView1.Nodes.Find(string key,bool searchAllChildren):查找具有指定键的树节点,可以选择搜索子节点,返回一个list[]。

C#编程,TreeView控件的学习的更多相关文章

  1. 【ASP.NET 进阶】TreeView控件学习

    这几天上班没事做,也不好打酱油,学点没接触过的新东西吧,基本了解了下TreeView控件. TreeView 控件用于在树结构中显示分层数据,例如目录或文件目录等. 下面看代码吧: 1.效果图 2.静 ...

  2. VB TreeView控件使用详解

    来源:http://www.newxing.com/Tech/Program/VisualBasic/TreeView_587.html 三小时快速掌握TreeView树状控件的使用.能不能掌握控件的 ...

  3. duilib进阶教程 -- TreeView控件(6)

    代码下载:http://download.csdn.net/detail/qq316293804/6483905 上一个教程中,界面已经和迅雷一模一样啦,大小和位置一个像素都不差哟,亏得Alberl调 ...

  4. 如何:使用TreeView控件实现树结构显示及快速查询

    本文主要讲述如何通过使用TreeView控件来实现树结构的显示,以及树节点的快速查找功能.并针对通用树结构的数据结构存储进行一定的分析和设计.通过文本能够了解如何存储层次结构的数据库设计,如何快速使用 ...

  5. [转] C#2010 在TreeView控件下显示路径下所有文件和文件夹

    原文 张丹-小桥流水,C#2010 在TreeView控件下显示路径下所有文件和文件夹 C#2010学习过程中有所收获,便总结下来,希望能给和我一样在学习遇到困难的同学提供参考. 本文主要介绍两个自定 ...

  6. VB TreeView控件使用详解(有趣的示例)

    第一小时:学习直接用代码将数据填充到树控件中. 为什么要先学习直接用代码将数据填充到树控件中?因为这种方法是最简单的,代码也最容易理解,学习树控件,先将这个学会,已经掌握了一半,所以先不要急着想怎么将 ...

  7. WPF中TreeView控件数据绑定和后台动态添加数据(一)

    数据绑定: 更新内容:补充在MVVM模式上的TreeView控件数据绑定的代码. xaml代码: <TreeView Name="syntaxTree" ItemsSourc ...

  8. TreeView控件使用

    treeView1.SelectedNode = treeView1.Nodes[0];  //选中当前treeview控件的根节点为当前节点添加子节点:  TreeNode tmp; tmp = n ...

  9. 基于Treeview控件遍历本地磁盘

    一.前言 Treeview控件常用于遍历本地文件信息,通常与Datagridview与ImageList搭配.ImageList控件用于提供小图片给TreeView控件,DatagridView通常显 ...

随机推荐

  1. Alwayson--配置只读请求

    场景:有三台服务器SQLNode131,SQLNode132 ,SQLNode133: 1) 三台服务器加入域DCDemo.com 2) 三台服务器使用端口访问数据库 3) 三台服务器构建故障转移群集 ...

  2. 国内云计算的缺失环节: GPU并行计算(转)

    [IT时代周刊编者按]云计算特有的优点和巨大的商业前景,让其成为了近年来的IT界最热门词汇之一.当然,这也与中国移动互联网的繁荣紧密相关,它们需要有相应的云计算服务作为支撑.但本文作者祁海江结合自身的 ...

  3. Microsoft Sql Server 2016安装在CentOS7下

    安装过程 如何安装直接参考这个文章:安装sql server 整个安装过程非常简单. 上面的文档里是通过 sudo 命令,用root身份来执行,不过这里为了简单,就用root账号来安装的. (1)下载 ...

  4. 打开SQL2008R2配置工具,提示远程调用失败[0x800706be]

    卸载了Microsoft SQL Server 2012 Express LocalDB,依然不行. 再卸载Microsoft SQL Server 2014 LocalDB,此时右边显示框已可以显示 ...

  5. 一个简单的QQ隐藏图生成算法

    隐藏图不是什么新鲜的东西,具体表现在大部分社交软件中,预览图看到的是一张图,而点开后看到的又是另一张图.虽然很早就看到过这类图片,但是一直没有仔细研究过它的原理,今天思考了一下,发现挺有趣的,所以自己 ...

  6. C#Winfrom Listview数据导入Excel

    需引用 public void ExportToExecl() { System.Windows.Forms.SaveFileDialog sfd = new SaveFileDialog(); sf ...

  7. JSON 数据转成Table

    public static DataTable JsonToDataTable(string strJson) { //转换json格式 strJson = strJson.Replace(" ...

  8. .NET Core 玩一玩 Ocelot API网关

    .net 这几年国内确实不好过. 很多都选择转行.不过.net Core跨平台 开源之后 .社区的生态在慢慢建立.往好的趋势发展. 对于坚守在.NET战线的开发者来说 是个挺不错的消息.  特别是微软 ...

  9. CentOS 7 - 安装Eclipse

    注意问题:Eclipse官方网站提供的tar文件有可能有问题,我今天下载的一个tar文件,在Windows下解压缩,随后放到CentOS 7里面不行,随后我又重新下载一份,还是不行,最终我下载了另外一 ...

  10. mysql数据库binlog日志的异地备份

    MySQL数据库的二进制日志binlog记录了对数据库的全量DDL和DML操作,对数据库的point to point灾难恢复起着无法替代的关键作用.因此,基于此类考虑,需要对生产环境产生的binlo ...