C# 递归产生树
//递归产生树
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# 递归产生树的更多相关文章
- asp.net TreeView与XML配合使用v1.1
刚我在做Tree view 绑定时自己摸索了一下,网上有人说TreeView绑定数据源,用什么递归绑定啥的,我不想看了,就自己试着写了一个 我是这样做的,如果有什么问题请大神指导,我是菜鸟额.. 1: ...
- POJ 2377 Bad Cowtractors (Kruskal)
题意:给出一个图,求出其中的最大生成树= =如果无法产生树,输出-1. 思路:将边权降序再Kruskal,再检查一下是否只有一棵树即可,即根节点只有一个 #include <cstdio> ...
- 初学WebGL引擎-BabylonJS:第4篇-灯光动画与丛林场景
前几章接触的案例都是接近静态的,由这张开始开始接触大量动态的内容,包括 球体灯光,变动的形体,以及一个虚拟的丛林场景 下章我会试着结合1-9案例的内容做出一个demo出来 [playground]-l ...
- 递归神经网络(Recursive Neural Network, RNN)
信息往往还存在着诸如树结构.图结构等更复杂的结构.这就需要用到递归神经网络 (Recursive Neural Network, RNN),巧合的是递归神经网络的缩写和循环神经网络一样,也是RNN,递 ...
- 模块调用,datetime,time,logging,递归,双层装饰器, json,pickle迭代器和生成器
一.python模块(导入,内置,自定义,开源) 1.模块简介 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用python ...
- 在Spring Bean实例过程中,如何使用反射和递归处理的Bean属性填充?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! <Spring 手撸专栏>目录 [x] 第 1 章:开篇介绍,我要带你撸 Spri ...
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
- 算法笔记_013:汉诺塔问题(Java递归法和非递归法)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...
- Android 算法 关于递归和二分法的小算法
// 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public st ...
随机推荐
- 多叉树结构的数据,parent表示法转成children表示法
最近碰到的问题,有个数组,数组元素是对象,该对象的结构就如树的parent表示法的节点一样.形象点讲就是该数组存放了树的所有“叶子节点”,并且叶子节点内存有父节点,一直到根节点为止,就如存了一条从叶子 ...
- SQL中IS NOT NULL与!=NULL的区别
平时经常会遇到这两种写法:IS NOT NULL与!=NULL.也经常会遇到数据库有符合条件!=NULL的数据,但是返回为空集合.实际上,是由于对二者使用区别理解不透彻. 默认情况下,推荐使用 IS ...
- Solr学习记录:Getting started
目录 Solr学习记录:Getting started 1.Solr Tutorial 2. A Quick Overview Solr学习记录:Getting started 本教程使用环境:jav ...
- 一个asp+ACCESS省市二级联动菜单程序
<%dim conndim connstron error resume nextconnstr="DBQ="+server.MapPath("test.mdb&q ...
- HDU 1515
简单题,直接用STACK模拟整个过程. 模拟出栈时,应注意保护现场,等到递归完成后返回. #include <iostream> #include <string.h> #in ...
- C++编程->pair(对组)
pair 是 一种模版类型.每一个pair 能够存储两个值.这两种值无限制,能够是tuple.vector ,string,struct等等. 首先来看一下pair的函数 初始化.复制等相关操作例如以 ...
- oracle 数据库开发面试题
近期參加了数场面试,总结一下竞聘oracle 开发岗位最常问到哪些问题: 1.delete 与 truncate 差别? 1)truncate 是DDL语句.delete 是DML语句: 2)trun ...
- Java读源代码学设计模式:适配器Adapter
适配器模式相关源代码:slf4j-1.6.1.hibernate-3.6.7 大家都知道.log4j是一个广泛使用的日志工具,除此之外.sun公司在JDK中也有自己的日志工具,也就是java.util ...
- c27---typedef
// // main.c // typedef #include <stdio.h> /* typedef可以给一个已知的数据类型起别名. typedef 原有的数据类型 别名; 注意: ...
- [NOIP 2017] 奶酪
[题目链接] http://uoj.ac/problem/332 [算法] 直接搜索即可 注意使用long long [代码] #include<bits/stdc++.h> using ...