效果图:

结构:

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# 树状图的更多相关文章

  1. SqlServer-无限递归树状图结构设计和查询

    在现实生活中,公司的部门设计会涉及到很多子部门,然后子部门下面又存在子部门,形成类似判断的树状结构,比如说评论楼中楼的评论树状图,职位管理的树状图结构等等,实现类似的树状图数据结构是在开发中经常出现的 ...

  2. Android开源图表之树状图和饼状图的官方示例的整理

    最近由于工作需要,所以就在github上搜了下关于chart的三方框架 官方地址https://github.com/PhilJay/MPAndroidChart 由于工作需要我这里整理了一份Ecli ...

  3. D3树状图给指定特性的边特别显示颜色

    D3作为前端图形显示的利器,功能之强,对底层技术细节要求相对比较多. 有一点,就是要理解其基本的数据和节点的匹配规则架构,即enter,update和exit原理,我前面的D3基础篇中有介绍过,不明白 ...

  4. D3树状图异步按需加载数据

    D3.js这个绘图工具,功能强大不必多说,完全一个Data Driven Document的绘图工具,用户可以按照自己的数据以及希望实现的图形,随心所欲的绘图. 图形绘制,D3默认采用的是异步加载,但 ...

  5. [整理] ES5 词法约定文档树状图

    将ES5 词法说明整理为了树状图,方便查阅,请自行点开小图看大图:

  6. bzoj 4871: [Shoi2017]摧毁“树状图” [树形DP]

    4871: [Shoi2017]摧毁"树状图" 题意:一颗无向树,选两条边不重复的路径,删去选择的点和路径剩下一些cc,求最多cc数. update 5.1 : 刚刚发现bzoj上 ...

  7. vue 树状图数据的循环 递归循环

    在main.js中注册一个子组件 在父组件中引用 树状图的数据格式 绑定一个数据传入子组件,子组件props接收数据 子组件中循环调用组件,就实现了递归循环

  8. ztree 文件夹类型的 树状图

    未套程序的源代码: 链接:http://pan.baidu.com/s/1nuHbxhf 密码:4aw2 已套程序的源代码: css样式: /*发布邮件 选择领导弹窗*/ .xuandao{ disp ...

  9. visio画等分树状图

    一 树状图形状 Search里搜索Tree,找到Double Tree或者Multi Tree的形状 二 分出更多branch 按住主干上的黄色小方块,拖出更多分支. 三 等分分支 将每个分支和对应的 ...

  10. ArcGIS教程:树状图

    摘要 构造可显示特征文件里连续合并类之间的属性距离的树示意图(树状图). 使用方法 · 输入特征文件必须採用预定的特征文件格式. 特征文件可使用 Iso 聚类或创建特征工具来创建.该文件必须至少包括两 ...

随机推荐

  1. Python3+Flask安装使用教程

    一.环境配置 当前我的开发环境是Miniconda3+PyCharm.开发环境其实无所谓,自己使用Python3+Nodepad都可以.安装Flask库: pip install Flask 二.第一 ...

  2. srping的历史与哲学

    历史: 要谈Spring的历史,就要先谈J2EE.J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是在实践中并没有获得绝对的成功, ...

  3. mysql innodb 唯一键里的字段为什么不能为NULL

    mysql 唯一键失效 CREATE TABLE `studnet_unique` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100 ...

  4. .NET反射简单应用———遍历枚举字段

    反射(Reflection)是一个非常强大的工具,可以用来查看和遍历类型和类型成员的元数据:动态创建类型实例,动态调用所创建的实例方法.字段.属性:迟绑定方法和属性.此次要介绍的是使用反射查看类型成员 ...

  5. 解决MyEclipse启动慢,使用卡顿问题

    卡顿原因: 1.启动的服务和插件过多,导致启动和运行缓慢,电脑配置较差的直接会卡死没有响应 2.软件运行内存设置不足,导致没有足够的空间运行软件,致使软件卡顿 解决方法: windows --> ...

  6. react-redux-store

    store是联系state 和 reducer的部分 Store 有以下职责: 维持应用的 state: 提供 getState() 方法获取 state: 提供 dispatch(action) 方 ...

  7. layui从子iframe打开父iframe的tab选项卡

    数据表格字段: {field: 'novelId', title: '小说ID',width:100,templet: '<div><a href="javascript: ...

  8. TreeSet VS HashSet VS LinkedHashSet; TreeMap VS HashMap VS LinkedHashMap

    From online resources Set HashSet is much faster than TreeSet (constant-time versus log-time for mos ...

  9. Linux 下编程

    关于Linux 下的C语言编译命令和编程要点! https://www.cnblogs.com/wfwenchao/p/3985153.html?utm_source=tuicool&utm_ ...

  10. JAVA Character类

    字符可以用char类型声明: char ch = 'a'; // Unicode 字符表示形式 char uniChar = '\u039A'; // 字符数组 char[] charArray ={ ...