新建一个WinForm项目以后,在窗体中放入一个treeView控件(treeView1),根据数据库数据填充创建树节点。数据库的结构以下:
node
ID Title P_ID数据库
a 根节点 0c#
b 子节点1 aide
c 子节点2 aspa
默认P_ID=0的节点为根节点a,下面有2个子节点b、c。code
ID列为不重复的文本,在treeView1中表示TreeNode的Name属性;orm
Title列为普通文本,在treeView1中表示TreeNode的Text属性;对象
P_ID列为父ID,在treeView1中表示TreeNode的Tag属性。递归
1、用递归方法进行历遍添加全部节点到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); //用递归的方法添加完整的树节点 } }
2、处理通常的事件和设置
1、树节点的单击事件:treeView1_AfterSelect,代码:
//使节点标签可编辑 treeView1.LabelEdit = true;
2、树节点修改完成后事件:treeView1_AfterLabelEdit,代码:
//使节点标签不可编辑 treeView1.LabelEdit = false;
3、树节点失去焦点仍高亮的设置:
(1)
treeView1.HideSelection = false; //通常在完成树节点以后
(2)treeView1_DrawNode 事件:
e.DrawDefault = true; //这里只是一个默认值,可添加剧绘节点的具体代码
3、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; //树视图的深度(从零开始)
4、在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[]。