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 聚类或创建特征工具来创建.该文件必须至少包括两 ...
随机推荐
- chrome 和IE 上传的文件,在net 后台取值Request.Form.Files[0].FileName 的不同
chrome 和IE 上传的文件,在net 后台取值Request.Form.Files[0].FileName 的不同 chrome 获得的是不含路径的纯文件名 IE获得的是含路径的文件名
- '假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在此可执行文件所在目录的DOS提示符下键入:PROG ABCDEFGH IJKL<回车>,则输出结果为( ). void main( int argc, char *argv[]) { while(--argc>0) cout<<argv[argc]; cout<<"\n"; }
main(int argc,char *argv[])函数的两个形参,第一个int argc,是记录你输入在命令行(你题目中说的操作就是命令行输入)上的字符串个数:第二个*argv[]是个指针数组,存 ...
- Mysql生产指定时间段随机日期函数
UPDATE basicsale_b2b2c.basic_customer SET registerDate = ( from_unixtime( unix_timestamp('2017-01-01 ...
- css三种基本选着器
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- 小白的python之路11/15 awk 77-78
awk -F指定分隔符 eg下图指定 : 为分隔符,$1 $4 NF表示以分隔符为表准,该行分了几段 $NF表示取最后一段 正则表达式 表示打印第一个开头的用户名awk -F: '/nolog ...
- 《程序设计入门——C语言》翁恺老师 第五周编程练习记录
1 素数和(5分) 题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个 ...
- min_25筛题目总结
看了网上众多博客后,我才发现,实现min_25只有脑子,没有代码. 当然可能是我太ruo了. min_25是一种想法,不是算法. 不要尝试套模板,因为很多题目并没有什么用. 最重要的一点,g不要看成是 ...
- Vue的自定义组件之间的数据传递
一,父级传向子级 1,在子级的属性中添加props:['myname',......],参数可以传多个,看具体而定: 2,在父级data中定义好需要传递的变量数据,例如name:"rose& ...
- js 两数的最大公约数
function gcd(a,b){ if (b == 0){ return a; } var r = parseInt(a % b) ; return gcd(b, r);}gcd(12,5);
- 考研计算机复试(C语言复试笔试题)(精华题选)
1.以下选择中,正确的赋值语句是(C) A.a=1,b=2 B.j++ C.a=b=5; D.y=(int)x 解析:选项A.B.D都无分号 变量 = 表达式;//赋值语句是一定带分号的 int a= ...