treeview递归绑定的两种方法

方法一:

复制代码代码如下:

public void creattree(int fid, TreeNode parentnode)
           {

DataTable dt = new DataTable();
               dt = op.BindGroup();
               DataRow[] drs = dt.Select("parentid=" + fid);
               foreach (DataRow row in drs)
               {
                   if (parentnode != null)
                   {
                       TreeNode tempnode = new TreeNode();
                       tempnode.Text = row["groupname"].ToString();
                       tempnode.Name = row["groupid"].ToString();
                       parentnode.Nodes.Add(tempnode);
                       creattree(Convert.ToInt32(row["groupid"]), tempnode);
                   }
                   else
                   {
                       TreeNode tempnode = new TreeNode();
                       tempnode.Text = row["groupname"].ToString();
                       tempnode.Name = row["groupid"].ToString();
                       treeView1.Nodes.Add(tempnode);
                       creattree(Convert.ToInt32(row["groupid"]), tempnode);                    
                   }
               }
           }

private void bindtree()
           {
               treeView1.Nodes.Clear();
               creattree(0,(TreeNode)null);
           }

方法二:

复制代码代码如下:

public void AddTree(int ParentID, TreeNode pNode)
           {
               DataTable dt = new DataTable();
               dt = op.BindGroup();
               DataView dvTree = new DataView(dt);
               //过滤ParentID,得到当前的所有子节点   
               dvTree.RowFilter = "parentid    =    " + ParentID;

foreach (DataRowView Row in dvTree)
               {
                   TreeNode Node = new TreeNode();
                   if (pNode == null)
                   {          //添加根节点   
                       Node.Text = Row["groupname"].ToString();
                       treeView1.Nodes.Add(Node);
                       //Node.Expanded = true;

AddTree(Int32.Parse(Row["groupid"].ToString()), Node);          //再次递归   
                   }
                   else
                   {        //添加当前节点的子节点   
                       Node.Text = Row["groupname"].ToString();
                       pNode.Nodes.Add(Node);
                       //Node.Expanded = true;
                       AddTree(Int32.Parse(Row["groupid"].ToString()), Node);            //再次递归   
                   }
               }
           }

private void bindtree()
           {
               treeView1.Nodes.Clear();
               AddTree(0, (TreeNode)null);
           }

原文地址:https://www.cnblogs.com/ljs-13/p/12109203.html

时间: 2024-10-13 22:35:33

treeview递归绑定的两种方法的相关文章

DropdownList绑定的两种方法

动态绑定方法一:动态绑定数据库中的字段. SqlConnection conn = UtilitySqlClass.OperateDataBase.ReturnConn();string strSQL = "select * from CompanyType";SqlDataAdapter ada = new SqlDataAdapter(strSQL, conn);DataSet ds = new DataSet();ada.Fill(ds, "CompanyType&qu

15.输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4260432.html  声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换. 题目分析:

Centos7网卡绑定的两种方法

一.传统的bond方式 (1)bond几种主要模式介绍 ü mode 0 load balancing (round-robin)模式 ,需要交换机端支持,支持多端口负载均衡,支持端口冗余,slave接口的mac相同 ü mode 1 active-backup模式,最大支持两个端口,一主一备,同一时间只有一块网卡工作,不支持抢占 ü mode 4 采用IEEE802.3ad方式的动态协商机制聚合端口,需要交换机开启lacp,并且配置为主动(active)模式 ü mode5和mode6 类似m

反转一个链表的两种方法:递归和循环

下面是反转一个链表的两种方法: 一.循环算法 //反转一个链表,循环算法 LinkList Reverse(LinkList& head) { // if(!head) // return head; //此时不用判断head是否为空,如是空的话返回的也是空 LinkList cur = head; LinkList hou; LinkList beh = 0; while (cur) { hou = cur->next; cur->next = beh; beh = cur; cur

WPF 数据绑定,界面刷新的两种方法-----INotifyPropertyChanged

.Netformwork4.0及以下版本 -------INotifyPropertyChanged 命名空间: System.ComponentModel 后台代码 public partial class DvrWnd : UserControl { public DvrWnd() { InitializeComponent(); } private void InitInfo() { for (int i = 0; i < 10; i++) { DvrInfo dvrInfo = new

DataGridView显示数据的两种方法

1.简单介绍 DataGridView空间是我们常用的显示数据的控件,它有极高的可配置性和可扩展性. 2.显示数据 DataGridView显示数据一般我们常用的有两种方法,一种是直接设置DataSoure属性就可以绑定数据.此方法不需要写任何代码操作比较简单,但是它显示出来的是整张表的数据.如果整一表数据比较多,而且我们并不需要所有的数据的情况下,我们就应该考虑第二种方法了.通过写代码连接数据库并从数据库中读取数据,最后将返回的数据传给DataGridView.这种方法貌似比较复杂,但是它只显

在下拉列表中显示多个字段的两种方法

首先,我们需要从数据库中取到我们的数据 Class1: 1 string sqlcon = "Data Source=.;Initial Catalog=Test;User ID=sa;Password=******"; 2 3 public List<ModelClass> FindAll() 4 { 5 try 6 { 7 List<ModelClass> modList = new List<ModelClass>(); 8 using (Sq

DataGridView编辑后立即更新到数据库的两种方法

DataGridView控件是微软预先写好的一个显示数据的控件,功能非常强大,可以显示来自数据库表的数据和XML等其他来源的数据.最近在做一个迷你超市管理系统,要大量用到这个控件.所以花时间好好研究了下. 这是迷你超市管理系的库存数据DataGridView,用户一定会想如果能直接在DGV中修改数据就好了. 是的,这是一个很好的想法,这个功能微软早就帮我们想到了,现在可以使两种方法加以实现.下面就来介绍一下他们. 第一张方法:基于DataAdapter对象创建一个CommandBulider,用

在Java Web程序中使用监听器可以通过以下两种方法

之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响应,从本质上来说这些都是观察者模式的具体实现,在web程序中的监听器也不例外.在Java Web程序中使用监听器可以通过以下两种方法:通过注解@WebListener来标识一个自定义的监听器:[java] view plain copy@WebListener public class Custom