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 聚类或创建特征工具来创建.该文件必须至少包括两 ...
随机推荐
- bind与继承 待研究
class a { f() { console.log('a') } get f2() { console.log('f2') return (this['f'] = this.f.bind(this ...
- C# 加载并显示菜单
1,支持cui和cuix. 2,菜单组重复加载或显示,C#下都会崩溃.所以要判断. 3,菜单加到最后. public static AcadMenuGroup LoadMenu(AcadMenuGro ...
- element-ui的那些坑与总结
tags: 默认情况下,下划线是文本宽度 如果要加宽,则可以设置文本(label)的padding, 常规情况下,无法改label宽度,因为他是动态计算的 不过,可以通过自定义,把label拿出来,自 ...
- python中list,tuple,dict,set等深浅拷贝的问题记录
对于字典.元祖.列表 而言,进行赋值.浅拷贝和深拷贝时,其内存地址的变化是不同的. 1.赋值 赋值,只是创建一个变量,该变量指向原来内存地址,如: 1 2 3 n1 = {"k1" ...
- fwrite文件写入数据
文件的操作就两种:读和写 读:把文件中的内容读入到程序中,然后根据自己的项目需求把文件的数据进行相关的处理. 写:就是将程序中的数据,写入到文件中,去更新文件. 这么两种操作归到代码中就是这两种函数: ...
- leetcode python 037 求解数独
import numpy as npimport syssys.setrecursionlimit(1000) #例如这里设置为一百万 def get1(n): if n<3: ...
- js 发送http请求
// 1.创建 XHR对象(IE6- 为ActiveX对象) // 2.连接及发送请求 // 3.回调处理 function createXMLHttpRequest() { var xhr; ...
- python中对文件、文件夹,目录的基本操作
一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()2.返回指定目录下的所有文件和目 ...
- [git]入门-工作区、暂存区、版本库
转载整理自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256 ...
- Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 阅读笔记
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (使用循环一致的对抗网络的非配对图像-图 ...