在项目开发的过程中,树状结构用的很多,树结构不但能够很好的分类汇总,而且还能明确层次关系,方便操作

这里写一个简单的C#填充数的程序,一般要填充树状结构就会用递归的方法

先看数据库表结构:

parentID为改name的父节点id

C#代码:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1  private void button1_Click(object sender, EventArgs e)
        {
            DataSet ds = GetData();
            if (ds.Tables.Count <= 0) return;
            NodeAdd(treeView1, ds.Tables[0], true);
        }

private static DataSet GetData()
        {
            using (SqlConnection con = new SqlConnection("data source=.;initial catalog=Test;user id=sa"))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("select * from Student", con);
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adapter.Fill(ds);
                return ds;
            }
        }

//填充数
        private static void NodeAdd(TreeView tree, DataTable table, bool expandall)
        {
            foreach (DataRow row in table.Rows)
            {
                string id = row["id"].ToString().Trim();
                string name = row["name"].ToString().Trim();
                string parentID = row["parentID"].ToString().Trim();

TreeNode node = new TreeNode(name);
                node.Tag = id;
                //在树中根据id来查找这个节点,如果没有找到,则说明这个节点是父节点,如果查找到这个节点,则返回,返回的节点为node节点的父节点
                TreeNode parentNode = GetNodeByID(tree,parentID);
                if (parentNode == null)
                {
                    tree.Nodes.Add(node);
                }
                else  //如果不为空,则说明当前的节点为返回节点(parentNode)的子节点
                {
                    parentNode.Nodes.Add(node);
                }
                if (expandall)
                {
                    tree.ExpandAll();
                }
            }
        }

private static TreeNode GetNodeByID(TreeView tree, string id)
        {
            TreeNode result = null;
            foreach (TreeNode node in tree.Nodes)
            {
                if (node.Tag.ToString() == id)
                {
                    result = node;
                    break;
                }
                //判断当前节点是不是要查找的节点,如果不是,则查看当前节点是否有子节点,然后递归判断
                if (node.Nodes.Count > 0)
                {
                    result = GetNodeByID(node, id);
                    if (result != null)
                        break;
                }
            }
            return result;
        }

private static TreeNode GetNodeByID(TreeNode parentNode, string id)
        {
            TreeNode result = null;
            foreach (TreeNode node in parentNode.Nodes)
            {
                if (node.Tag.ToString() == id)
                {
                    result = node;
                    break;
                }

if (node.Nodes.Count > 0)
                {
                    result = GetNodeByID(node, id);
                    if (result != null)
                        break;
                }
            }
            return result;
        }

//运行结果

转载于:https://www.cnblogs.com/Julyzjc/p/9310283.html

Winfrom开发之动态生成TreeView树形菜单相关推荐

  1. C#动态生成treeview目录树

    思路: 获取全量树结构数据 通过递归动态添加树子节点 动态生成目录树 TreeView 在这里我第一步就无需复述了!主要是返回如下格式数据 //调用生成目录树方法 DepartmentTree.ini ...

  2. 动态生成treeview

    上一篇blog里的方法可以一次性的把数据库里的数据构造成treeview,但是如果数据量特别大那种方法就不行了,下面是动态构造treeview的办法,就是先把根(第一级)构造出来,然后每一个根节点下面 ...

  3. java数据库动态树形菜单_bootstrap treeview树形菜单 动态扩展 连数据库

    二话不说,先来看效果图: 呃呃,虽然不是很美观......不过功能实现就好啦~ 数据库模型是这样的: 我做了什么工作呢? 简单解释一下,就是通过查数据库,把上面的数据查出来,每一行数据封装成为一个节点 ...

  4. C#treeview树形菜单

    /// <summary>///TrreView数据绑定/// </summary>/// <param name="dt">获取datatab ...

  5. ZUI 动态加载树形菜单+动态打开Tab

    appData数据: {"code": 0,"msg": "操作成功","data": [{"AppGUID& ...

  6. 前端动态生成横向树形表格

    一.问题 遇到项目需求是横向展示树形数据,之前写的时候element的官方有加载树形数据的表格组件,项目其他地方有用表格组件的写的demo,但是涉及到行合并的逻辑判断,一时没搞清楚,就用原生画了表格. ...

  7. 教你如何用TreeView树形菜单创建像CSDN左边那样的导航之一:如何安装配置TreeView

    第一步:下载安装IE WEB CONTROLS 下载地址:http://msdn.microsoft.com/archive/en-us/samples/internet/asp_dot_net_se ...

  8. Django 权限管理-后台根据用户权限动态生成菜单

    Django权限管理 实现目标: 1.管理用户,添加角色,用户关联角色 2.添加权限.角色关联权限 3.添加动作.权限关联动作 4.添加菜单.权限关联菜单 实现动态生成用户权限菜单(可设置多级菜单嵌套 ...

  9. Android 多级树形菜单

    在Android里要实现树形菜单,都是用ExpandableList(也有高手自己继承ListView或者LinearLayout来做),但是ExpandableList一般只能实现2级树形菜单... ...

  10. Android提高十七篇之多级树形菜单的实现

    本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 在Android里要实现树形菜单,都是用ExpandableList(也有高手自己继承ListView或者Li ...

最新文章

  1. 使用valgrind分析C程序调用线路图
  2. 以开发工具推动BCH的应用构建
  3. Chkdsk 工具将自动启动时启动的运行 Windows XP Service Pack 2 计算机扫描磁盘
  4. oracle循环插入数据用于测试
  5. python中模块sys与os的一些常用方法
  6. mysql 存储过程 set into_mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法...
  7. 科学证明夜猫子都死得早?稳住,事情不是这样的
  8. spring三种注入方式
  9. 【算法分析与设计】浅谈递归与非递归
  10. 计算机网络-VRRP
  11. Redis学习笔记01---配置文件
  12. zepto为什么不支持animate,报animate is not a function
  13. Common lisp之加载方式(一)
  14. 软件开发技术文档的编写模块
  15. 添加Bigboss源
  16. Processing绘制星空-2-绘制流星
  17. Cassandra Cql
  18. 10篇校招/社招面经请你查收~
  19. .NET Remoting 最简单示例
  20. webservice二进制文件传输

热门文章

  1. 【转】C# 3.0 和VS2008 bug 收集
  2. oracle 简单job
  3. Oracle DBLINK 简单使用
  4. 你必须知道的Nginx常用基本命令
  5. JAVAWeb项目 微型商城项目-------(四)用户注册
  6. jsp用下拉框代替文本框_PPT封面太丑?教你三个高手都在用的美化技巧
  7. 给定一个介于0到1之间的实数(如0.625),打印他的二进制表示
  8. 位置度标注方法图解_追踪主力-散户操盘实战图解:操盘手法分析
  9. ROS踩坑日记(2)----ERROR: cannot download default sources list from:
  10. reids学习笔记汇总