//递归产生树
private void CreateTwo(TreeNode node, int id)
{
#region --根据指定ID查找数据到 dt
string strSql = "select * from Menu where MenuParent = " + id;
DataTable dt = SqlHelper.ExecuteDatatable(strSql);
#endregion if (id == ) // id = 0 是根节点
{
for (int i = ; i < dt.Rows.Count; i++) //先查询PID=0的
{
TreeNode nd = new TreeNode();
nd.Text = dt.Rows[i]["MenuName"].ToString();
CreateTwo(nd, Convert.ToInt32(dt.Rows[i]["MenuId"].ToString())); //把根节点ID传过去查找PID是该id的子节点
treeView1.Nodes.Add(nd);
}
}
else
{
for (int i = ; i < dt.Rows.Count; i++)
{
TreeNode Tnode = new TreeNode();
Tnode.Text = dt.Rows[i]["MenuName"].ToString();
CreateTwo(Tnode, Convert.ToInt32(dt.Rows[i]["MenuId"].ToString()));
node.Nodes.Add(Tnode);
}
}
}

非递归绑定3级别

        //绑定TrreView
private void InitModuleTree(DataTable dt)
{
//清空treeview上所有节点
this.treeView1.Nodes.Clear(); //先绑定父节点
for (int i = ; i < dt.Rows.Count; i++)
{
int Prent = Convert.ToInt16(dt.Rows[i]["MenuParent"]);//
if (Prent == ) //先绑定父节点
{
TreeNode nodeParent = new TreeNode();
nodeParent.Tag = dt.Rows[i]["MenuId"];//设置一个值,为加入子节点做准备,(先这样用,不管Tag是什么)
nodeParent.Text = dt.Rows[i]["MenuName"].ToString();
treeView1.Nodes.Add(nodeParent);
}
}
//在绑定子节点(绑定2级目录)
foreach (TreeNode item in treeView1.Nodes)
{
for (int i = ; i < dt.Rows.Count; i++)
{
var ss = dt.Rows[i]["MenuParent"]; //获取pid
var s1 = item.Tag;
if ((int)item.Tag == (int)dt.Rows[i]["MenuParent"]) //dt该行的pid = 这个父节点ID (表示属该行子节点)
{
TreeNode childNode = new TreeNode();
childNode.Tag = dt.Rows[i]["MenuId"];
childNode.Text = dt.Rows[i]["MenuName"].ToString();
item.Nodes.Add(childNode); //加入父节点中
}; }
}
//在绑定子节点(绑定3级目录)
foreach (TreeNode item1 in treeView1.Nodes)
{
int index0 = treeView1.Nodes.IndexOf(item1); //index 为索引值
var nodes1 = treeView1.Nodes[index0].Nodes; foreach (TreeNode item in nodes1)
{
for (int i = ; i < dt.Rows.Count; i++)
{
var ss = dt.Rows[i]["MenuParent"]; //获取pid
var s1 = item.Tag; if ((int)item.Tag == (int)dt.Rows[i]["MenuParent"]) //dt该行的pid = 这个父节点ID (表示属该行子节点)
{
TreeNode childNode = new TreeNode();
childNode.Tag = dt.Rows[i]["MenuId"];
childNode.Text = dt.Rows[i]["MenuName"].ToString();
item.Nodes.Add(childNode); //加入父节点中
}; }
}
} treeView1.ExpandAll(); //展开整棵树
}

C# 递归产生树的更多相关文章

  1. asp.net TreeView与XML配合使用v1.1

    刚我在做Tree view 绑定时自己摸索了一下,网上有人说TreeView绑定数据源,用什么递归绑定啥的,我不想看了,就自己试着写了一个 我是这样做的,如果有什么问题请大神指导,我是菜鸟额.. 1: ...

  2. POJ 2377 Bad Cowtractors (Kruskal)

    题意:给出一个图,求出其中的最大生成树= =如果无法产生树,输出-1. 思路:将边权降序再Kruskal,再检查一下是否只有一棵树即可,即根节点只有一个 #include <cstdio> ...

  3. 初学WebGL引擎-BabylonJS:第4篇-灯光动画与丛林场景

    前几章接触的案例都是接近静态的,由这张开始开始接触大量动态的内容,包括 球体灯光,变动的形体,以及一个虚拟的丛林场景 下章我会试着结合1-9案例的内容做出一个demo出来 [playground]-l ...

  4. 递归神经网络(Recursive Neural Network, RNN)

    信息往往还存在着诸如树结构.图结构等更复杂的结构.这就需要用到递归神经网络 (Recursive Neural Network, RNN),巧合的是递归神经网络的缩写和循环神经网络一样,也是RNN,递 ...

  5. 模块调用,datetime,time,logging,递归,双层装饰器, json,pickle迭代器和生成器

    一.python模块(导入,内置,自定义,开源) 1.模块简介 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用python ...

  6. 在Spring Bean实例过程中,如何使用反射和递归处理的Bean属性填充?

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! <Spring 手撸专栏>目录 [x] 第 1 章:开篇介绍,我要带你撸 Spri ...

  7. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

  8. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  9. Android 算法 关于递归和二分法的小算法

     // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public st ...

随机推荐

  1. 类型信息、异常、I/O流(day11)

    二十三 运行时的类型信息 typeid运算符 #include <typeinfo> typeid(类型/对象) )返回typeinfo的对象,用于描述类型信息. )在typeinfo类中 ...

  2. 洛谷P1601 A+B Problem(高精)

    题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] 输入输出格式 输入格式: 分两行输入a,b<=10^500 输出格式: 输 ...

  3. HDU1850 - Being a Good Boy in Spring Festival 【尼姆博弈】

    一年在外 父母时刻牵挂  春节回家 你能做几天好孩子吗  寒假里尝试做做下面的事情吧  陪妈妈逛一次菜场  悄悄给爸爸买个小礼物  主动地 强烈地 要求洗一次碗  某一天早起 给爸妈用心地做回早餐  ...

  4. [51Nod 1218] 最长递增子序列 V2 (LIS)

    传送门 Description 数组A包含N个整数.设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS).A的LIS可 ...

  5. 15.Hibernate一对多双向关联映射+分页

    1.创建如下数据库脚本 --创建用户信息表 --编号,用户名,密码,年龄,性别,昵称,手机,地址,管理员,图像地址 create table users ( id ) primary key, use ...

  6. redis-事务-transaction

    redis的目标的是: 简洁,高效,由于事务本身就是一个很复杂的东西,所有我们不能把事务做的太复杂... multi,exec 127.0.0.1:6379> multi OK 127.0.0. ...

  7. CF D. Beautiful numbers (数位dp)

    http://codeforces.com/problemset/problem/55/D Beautiful Numbers : 这个数能整除它的全部位上非零整数.问[l,r]之间的Beautifu ...

  8. 浅析hybrid模式下地支付宝钱包和微信

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VuY2hhbzEyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  9. C语言数组和函数实例练习(二)

    1.C语言中不允许函数的嵌套定义,但可以使用函数的嵌套调用. 例1:输入4个整数,找出其中最大的数. #include <stdio.h> #include <stdlib.h> ...

  10. Huffman编码实现压缩解压缩

    这是我们的课程中布置的作业.找一些资料将作业完毕,顺便将其写到博客,以后看起来也方便. 原理介绍 什么是Huffman压缩 Huffman( 哈夫曼 ) 算法在上世纪五十年代初提出来了,它是一种无损压 ...