WinForm 数据库无限填充树目录 treeView
我自己想的是处理数据库每一条数据,然后来插入子节点的子节点。
奈何没有插入子节点的子节点的办法,百度来百度去,一看全都是递归。
本来我是绝望的,
但是没办法,老板的需求不能驳回啊,于是就来ctrl c/ctrl v吧。
在网上查到了一个能看懂的,基本是原样copy了下来。
private void SetTreeView()
{
//填充treeview
string sql = "select * from SupplierType";
DataTable dt = SQLHelp.GetDataTable(sql);
dataGridView.DataSource = dt; if (dt != null)
{
foreach (DataRow row in dt.Rows)
{
string id = row["SupplierTypeID"].ToString().Trim();
string name = "(" + id + ")" + row["SupplierTypeName"].ToString().Trim();
string fatherid = row["SupplierFatherTypeID"].ToString().Trim(); TreeNode node = new TreeNode(name);
node.Tag = id;
//在树中根据id来查找这个节点,如果没有找到,则说明这个节点是父节点,如果查找到这个节点,则返回,返回的节点为node节点的父节点
TreeNode parentNode = GetNodeByID(treeView, fatherid);
if (parentNode == null)
{
treeView.Nodes.Add(node);
}
else
{
parentNode.Nodes.Add(node);
}
}
} } private TreeNode GetNodeByID(TreeView treeView, string fatherid)
{
//根据id搜索节点
TreeNode result = null;
foreach (TreeNode node in treeView.Nodes)
{
if (node.Tag.ToString() == fatherid)
{
result = node;
break;
}
if (node.Nodes.Count > )
{
result = GetNodeByID(node, fatherid);
if (result != null)
{ break; }
}
}
return result;
} private TreeNode GetNodeByID(TreeNode parentNode, string fatherid)
{
//根据节点搜索子节点的节点
TreeNode result = null;
foreach (TreeNode node in parentNode.Nodes)
{
if (node.Tag.ToString() == fatherid)
{
result = node;
break;
}
if (node.Nodes.Count > )
{
result = GetNodeByID(node, fatherid);
if (result != null)
{ break; }
}
}
return result;
}
原理就是递归去寻找父元素,将加载好的节点向上层添加,
数据库中重点的数据就是,自己的ID,父类的ID,以及内容。
成果:

参考:http://www.cnblogs.com/wangshuai/archive/2010/07/21/1782522.html
WinForm 数据库无限填充树目录 treeView的更多相关文章
- C#:依据目录填充树视图
#region 依据目录填充树视图 /// <summary> /// 依据文件夹目录,填充树视图 /// </summary> /// <param name=&quo ...
- Winform TreeList递归绑定树节点
/// <summary> /// 绑定树目录 /// </summary> /// <param name="parentId">父ID< ...
- 【整理】iview Tree数据格式问题,无限递归树处理数据
iview Tree数据格式问题,无限递归树处理数据 https://juejin.im/post/5b51a8a4e51d455d6825be20
- Ubuntu 下 Mariadb 数据库的安装和目录迁移
Ubuntu 下 Mariadb 数据库的安装和目录迁移 1.简介 本文主要是 Ubuntu 下 Mariadb 数据库的安装和目录迁移,同样适用于 Debian 系统:Ubuntu 20.0.4 M ...
- Winform开发常用控件之TreeView菜单导航和权限用法
TreeView一个很棒的控件,我们在做WEB开发时常常犯困的一个东东.当然这里介绍winform里面的用法唠. 先介绍几个属性吧,CheckBoxes设置为true的话树形节点前面会出现checkb ...
- 数据库索引 B+树
问题1.数据库为什么要设计索引?索引类似书本目录,用于提升数据库查找速度.问题2.哈希(hash)比树(tree)更快,索引结构为什么要设计成树型?加快查找速度的数据结构,常见的有两类:(1)哈希,例 ...
- 数据库索引B+树
面试时无意间被问到了这个问题:数据库索引的存储结构一般是B+树,为什么不适用红黑树等普通的二叉树? 经过和同学的讨论,得到如下几个情况: 1. 数据库文件是放在硬盘上,每次读取数据库都需要在磁盘上搜索 ...
- 黄聪:查看mysql数据库真正的data目录
终于找到了mysql数据库data目录在哪里! 用show variables like 'datadir',可查看真正的data目录 原文:http://blog.csdn.net/dmz1981/ ...
- 如何知道PostgreSQL数据库下每个数据库所对应的目录
base目录,这是所有数据库目录的父目录. 在base目录下第一层,每个目录就是一个数据库所对应的文件. 那么如何知道哪个目录对应哪个数据呢? 查询如下:先看数据库列表 [pgsql@localhos ...
随机推荐
- numpy多项式拟合
关于解决使用numpy.ployfit进行多项式拟合的时候请注意数据类型,解决问题的思路就是统一把数据变成浮点型,就可以了.这是numpy里面的一个bug,非常low希望后面改善. # coding: ...
- Go语言知识点笔记
golang的花括号: 在go中,继承了C系的花括号作为一个作用域块的包含范围指示,但不同于C/C++中花括号位置可任意摆放,go要求“ { ”必须在右侧(一行代码尾部),不能单独另起一行.类似Pyt ...
- JS三种消息框的使用
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- oracle字符集查看、修改、版本查看
.1.先查服务端的字符集 或者 2.再查客户端的字符集 两个字符集(不是语言)一致的话就不会乱码了 详细资料 一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有 ...
- Python time()方法
from:http://www.runoob.com/python/att-time-time.html 描述 Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数 ...
- 十七、springboot配置FastJson为Spring Boot默认JSON解析框架
前提 springboot默认自带json解析框架,默认使用jackson,如果使用fastjson,可以按照下列方式配置使用 1.引入fastjson依赖库: maven: <dependen ...
- python基础-各模块文章导航
python基础学习日志day5-各模块文章导航 python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html p ...
- 你竟然在公钥中下毒!——如何在RSA公钥中添加后门
原文:http://www.hackdig.com/?01/hack-17893.htm 分享到: 当我知道它是如何运行时,我惊得下巴都掉了.这是一个非常简单的手法,但这篇文章会颠覆你之前对RSA的看 ...
- 洛谷P2746校园网
传送门啦 下面来看任务B.我们发现,图中只要存在入度为0的点和出度为0的点就永远不可能满足要求:" 不论我们给哪个学校发送新软件,它都会到达其余所有的学校 ".我们还发现,只要在入 ...
- Spring框架(管理事务)
Spring底层使用Transaction事物模板来进行操作.具体操作: 1.service 需要获得 TransactionTemplate 2.spring 配置模板,并注入给service 3. ...