//递归产生树
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. UVA489 - Hangman Judge【紫书例题4.2】

    题意:就是给出一个字符串,让你去一个一个猜测,相同字母算一次,如果是之前猜过的也算错,如果你在错7次前猜对就算你赢,文章中是LRJ的例题代码. #include<stdio.h> #inc ...

  2. 以豌豆荚为例,用 Scrapy 爬取分类多级页面

    本文转载自以下网站:以豌豆荚为例,用 Scrapy 爬取分类多级页面 https://www.makcyun.top/web_scraping_withpython17.html 需要学习的地方: 1 ...

  3. 解决ICS40上设置APN无权限问题

    在ICS40以前的版本中,如果程序需要设置APN,只需要在AndroidManifest文件中声明<uses-permission android:name="android.perm ...

  4. Ubuntu14.043下QT5.5的安装与一点问题

    请注明来自于 http://www.cnblogs.com/usegear/p/5100720.html 1.下载qt-opensource-linux-x86-5.5.0.run(去教育镜像网站下载 ...

  5. 01010_Eclipse中项目的jar包导入与导出

    1.jar包 jar包是一个可以包含许多.class文件的压缩文件.我们可以将一个jar包加入到项目的依赖中,从而该项目可以使用该jar下的所有类:也可以把项目中所有的类打包到指定的jar包,提供给其 ...

  6. 怎样从C++代码直接訪问android framework层的WifiService

    说究竟,Java层的service就是就C++层的binder的封装.所以从原理上来讲通过C++代码直接訪问android framework层的service是全然可能的,这篇文章以訪问WifiSe ...

  7. Ural 1167 Bicolored Horses (DP)

    题目地址:Ural 1167 感觉这题的思路类似于背包的做法. . 先预处理出来每一个马与之前全部的马的0的数量和1的数量,用数组a[0][i]和a[1][i]来表示. 然后再用数组dp[i][j]来 ...

  8. JS计算两时间的天数

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> </head> <body>& ...

  9. Linux学习笔记——例说makefile 索引博文

    0.前言     从学习C语言開始就慢慢開始接触makefile.查阅了非常多的makefile的资料但总感觉没有真正掌握makefile,假设自己动手写一个makefile总认为非常吃力.所以特意借 ...

  10. 【待解决】maven创建web报Cannot read lifecycle mapping metadata for artifact org.apache.maven.plugins

    Cannot read lifecycle mapping metadata for artifact org.apache.maven.plugins:maven-war-plugin:maven- ...