C# 树状图
效果图:

结构:

frmMain层
using hierarchy.BLL;
using hierarchy.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace hierarchy.UI
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
hierarchysBll bll = new hierarchysBll();
List<Thelog> list = null;
private void frmMain_Load(object sender, EventArgs e)
{
tvmo();
} #region MyRegion public void tvmo() {
tvMov.Nodes.Clear();
TreeNode dd = null;
list = bll.findAll();
foreach (Thelog item in list)
{
dd = new TreeNode();
if (item.Qfatherid == )
{
dd.Tag = item.Qid;
dd.Text = item.Qname;
tvMov.Nodes.Add(dd);
GetNode(dd, item.Qid);
}
} } private void GetNode(TreeNode Qname, int Qid)
{
list = bll.findAll();
TreeNode tn = null;
if (list.Count > )
{
foreach (Thelog drv in list)
{
if (Qid == drv.Qfatherid)
{
tn = new TreeNode();
tn.Tag = drv.Qid;
tn.Text = drv.Qname;
Qname.Nodes.Add(tn);
GetNode(tn, drv.Qid);
} }
}
} #endregion private void button1_Click(object sender, EventArgs e)
{
TreeNode node = tvMov.SelectedNode;
int s = (int)node.Tag;
int i = node.Level;
frmaddlei add = new frmaddlei(s, i, node);
add.Show();
} private void button3_Click(object sender, EventArgs e)
{
TreeNode node = tvMov.SelectedNode;
int id = (int)node.Tag; bool bl = bll.finddel(id);
if (bl)
{
node.Remove();
MessageBox.Show("删除成功!!");
}
else
{
MessageBox.Show("出错啦!!!");
}
} private void button2_Click(object sender, EventArgs e)
{
TreeNode node = tvMov.SelectedNode;
int s = (int)node.Tag;
string i = node.Text;
frmup add = new frmup(s, i, node);
add.Show();
} private void tvMov_AfterSelect(object sender, TreeViewEventArgs e)
{
TreeNode node = tvMov.SelectedNode;
string i = node.Text; MessageBox.Show(i);
} }
}
删除层
using hierarchy.BLL;
using hierarchy.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace hierarchy.UI
{
public partial class frmaddlei : Form
{
public frmaddlei()
{
InitializeComponent();
}
int ss = ;
int ii = ;
TreeNode aodee = null;
public frmaddlei(int s, int i, TreeNode aode)
{
ss = s;
ii = i;
aodee = aode;
InitializeComponent(); }
hierarchysBll bll = new hierarchysBll();
private void button1_Click(object sender, EventArgs e)
{
Thelog Thelog = new Thelog();
Thelog.Qname = tbxname.Text;
Thelog.Qfatherid=ii;
Thelog.Qtier = ss;
bool bl = bll.findAdd(Thelog);
if (bl)
{
MessageBox.Show("添加成功");
string guid = Guid.NewGuid().ToString();
TreeNode t = new TreeNode(this.tbxname.Text);
t.Tag = guid;
aodee.Nodes.Add(t);
this.Close(); }
}
}
}
Dal层
using hierarchy.Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace hierarchy.DAL
{
public class hierarchysDAL
{ //01.写一个查询所有年级的方法
public List<Models> findAllGrades()
{
List<Models> list = new List<Models>();
string sql = "select [StudentName] from [Address_IS]";
DataTable table = SQLHelper.ExecuteDataTable(sql);
foreach (DataRow item in table.Rows)
{
Models Models = new Models();
Models.StudentName = item["StudentName"].ToString();
list.Add(Models);
}
return list; } //01.写一个查询所有年级的方法
public List<Thelog> findAll()
{
List<Thelog> list = new List<Thelog>();
string sql = "SELECT * FROM Thelog";
DataTable table = SQLHelper.ExecuteDataTable(sql);
foreach (DataRow item in table.Rows)
{
Thelog Thelog = new Thelog();
Thelog.Qid = Convert.ToInt32(item["qid"]);
Thelog.Qname = item["qname"].ToString();
Thelog.Qtier = Convert.ToInt32(item["qtier"]);
Thelog.Qfatherid = Convert.ToInt32(item["qfatherid"]);
list.Add(Thelog);
}
return list; } public bool findAdd(Thelog Thelog)
{
bool bl = false;
string sql = @"INSERT INTO Thelog(qname,qfatherid,qtier) VALUES(@name,@fatherid,@tid)";
SqlParameter[] paras = {
new SqlParameter("@name", Thelog.Qname),
new SqlParameter("@fatherid", Thelog.Qtier),
new SqlParameter("@tid", Thelog.Qfatherid)
};
int i = (int)SQLHelper.ExecuteNonQuery(sql,paras);
if (i > )
{
bl = true;
}
return bl; } public bool finddel(int id) {
bool bl = false;
string sql = "delete from Thelog where qid=@nid";
SqlParameter[] paras = {
new SqlParameter("@nid",id)
};
int i = (int)SQLHelper.ExecuteNonQuery(sql, paras);
if (i > )
{
bl = true;
}
return bl;
} public bool update(Thelog Thelog)
{
bool bl = false;
string sql = "update Thelog set qname=@name where qid=@id";
SqlParameter[] paras = {
new SqlParameter("@name", Thelog.Qname),
new SqlParameter("@id", Thelog.Qid)
};
int i = (int)SQLHelper.ExecuteNonQuery(sql, paras);
if (i > )
{
bl = true;
}
return bl;
} }
}
C# 树状图的更多相关文章
- SqlServer-无限递归树状图结构设计和查询
在现实生活中,公司的部门设计会涉及到很多子部门,然后子部门下面又存在子部门,形成类似判断的树状结构,比如说评论楼中楼的评论树状图,职位管理的树状图结构等等,实现类似的树状图数据结构是在开发中经常出现的 ...
- Android开源图表之树状图和饼状图的官方示例的整理
最近由于工作需要,所以就在github上搜了下关于chart的三方框架 官方地址https://github.com/PhilJay/MPAndroidChart 由于工作需要我这里整理了一份Ecli ...
- D3树状图给指定特性的边特别显示颜色
D3作为前端图形显示的利器,功能之强,对底层技术细节要求相对比较多. 有一点,就是要理解其基本的数据和节点的匹配规则架构,即enter,update和exit原理,我前面的D3基础篇中有介绍过,不明白 ...
- D3树状图异步按需加载数据
D3.js这个绘图工具,功能强大不必多说,完全一个Data Driven Document的绘图工具,用户可以按照自己的数据以及希望实现的图形,随心所欲的绘图. 图形绘制,D3默认采用的是异步加载,但 ...
- [整理] ES5 词法约定文档树状图
将ES5 词法说明整理为了树状图,方便查阅,请自行点开小图看大图:
- bzoj 4871: [Shoi2017]摧毁“树状图” [树形DP]
4871: [Shoi2017]摧毁"树状图" 题意:一颗无向树,选两条边不重复的路径,删去选择的点和路径剩下一些cc,求最多cc数. update 5.1 : 刚刚发现bzoj上 ...
- vue 树状图数据的循环 递归循环
在main.js中注册一个子组件 在父组件中引用 树状图的数据格式 绑定一个数据传入子组件,子组件props接收数据 子组件中循环调用组件,就实现了递归循环
- ztree 文件夹类型的 树状图
未套程序的源代码: 链接:http://pan.baidu.com/s/1nuHbxhf 密码:4aw2 已套程序的源代码: css样式: /*发布邮件 选择领导弹窗*/ .xuandao{ disp ...
- visio画等分树状图
一 树状图形状 Search里搜索Tree,找到Double Tree或者Multi Tree的形状 二 分出更多branch 按住主干上的黄色小方块,拖出更多分支. 三 等分分支 将每个分支和对应的 ...
- ArcGIS教程:树状图
摘要 构造可显示特征文件里连续合并类之间的属性距离的树示意图(树状图). 使用方法 · 输入特征文件必须採用预定的特征文件格式. 特征文件可使用 Iso 聚类或创建特征工具来创建.该文件必须至少包括两 ...
随机推荐
- 使用PHP添加圆形头像
首先来看一下PHP怎样生成一个圆形透明的图片 function circle($url){ $w = 430; $h=430; // original size $path = dirname(__F ...
- os.path官方文档(附翻译)
This module implements some useful functions on pathnames. To read or write files see open(), and fo ...
- windows异步通知I/O模型
回声服务器端: #include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #define BUF_S ...
- Linq 27个常用操作符说明
1.Where 操作符用于限定输入集合中的元素,将符合条件的元素组织声称一个序列结果.2.Select 操作符用于根据输入序列中的元素创建相应的输出序列中的元素,输出序列中的元素类型可以与输入序列中 ...
- 在form表单里上传图片
需要上传多个图片分别上传,本来提供的工具类里上传一张可以form表单对象实现 后台用MultipartFile file var formdata = new FormData($("#in ...
- FX-玩列表
list = []while True: meus = ("1.查看","2.添加","3.删除","0.退出") pr ...
- 使用引用计数和copy-on_write实现String类
本文写于2017-01-18,从老账号迁移到本账号,原文地址:https://www.cnblogs.com/huangweiyang/p/6295420.html 这算是我开始复习的内容吧,关于st ...
- 单链表数据结构 - java简单实现
链表中最简单的一种是单向链表,每个元素包含两个域,值域和指针域,我们把这样的元素称之为节点.每个节点的指针域内有一个指针,指向下一个节点,而最后一个节点则指向一个空值.如图就是一个单向链表 一个单向链 ...
- [转]MYSQL 创建存储过程
MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库 ...
- Tensorflow实战系列之五:
打算写实例分割的实战,类似mask-rcnn. Tensorflow实战先写五个系列吧,后面新的技术再添加~~