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 ...
随机推荐
- Sublime遇见中文乱码问题?
今天在写demo的时候,突然发现html页面上的中文在浏览器上显示乱码~!!!!! 这时,我根据网上的提示安装了两个插件:converttoUtf-8,support Gbk ~~~然而,好像无济于事 ...
- 调整扩大VMDK格式VirtualBox磁盘空间
如果虚拟机的格式是VDI格式的, 那么可以通过这篇文章来调整磁盘大小: 调整Virtual Box硬盘大小 不过楼主当初在创建虚拟机的时候,是用的VMDK格式, 以求与VMWare的兼容性.这时候要扩 ...
- 线段树(dfs序建树加区间更新和单点查询)
题目链接:https://cn.vjudge.net/contest/66989#problem/J 记录一下这道折磨了我一天的题,.... 具体思路: 具体关系可通过dfs序建树,但是注意,在更新以 ...
- Django 创建第一个Project — Django学习(二)
检查django If Django is installed, you should see the version of your installation. If it isn’t, you’l ...
- UNIX环境高级编程 第10章 信号
SIGSTOP和SIGKILL区别是:前者是使进程暂时停止,即中止,也就是说使进程暂停,将进程挂起,比如你在终端里面执行一个脚本或者程序,执行到一半,你想暂停一下,你按下ctrl+z,就会导致终端发送 ...
- 20165230 2017-2018-2 《Java程序设计》第8周学习总结
20165230 2017-2018-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十二章 java多线程机制 一个进程在其执行过程中,可产生多个线程.线程是比进程更小的执行 ...
- _csv.Error: line contains NULL byte
原因是表格保存时扩展名为 xls,而我们将其改为csv文件通常是重命名: 解决方法只需把它另存为 csv 文件.
- Linux 查看内存插槽数、最大容量的方法
查看内存插槽数: dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range 查看最大容量: dmidecode ...
- 15 Defer, Panic, and Recover
Defer, Panic, and Recover 4 August 2010 Go has the usual mechanisms for control flow: if, for, switc ...
- 简单ORACLE分区表、分区索引
前一段听说CSDN.COM里面很多好东西,同事建议看看合适自己也可以写一写,呵呵,今天第一次开通博客,随便写点东西,就以第一印象分区表简单写第一个吧. ORACLE对于分区表方式其实就是将表分段存储, ...