效果图:

结构:

frmMain层

  1. using hierarchy.BLL;
  2. using hierarchy.Model;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12.  
  13. namespace hierarchy.UI
  14. {
  15. public partial class frmMain : Form
  16. {
  17. public frmMain()
  18. {
  19. InitializeComponent();
  20. }
  21. hierarchysBll bll = new hierarchysBll();
  22. List<Thelog> list = null;
  23. private void frmMain_Load(object sender, EventArgs e)
  24. {
  25. tvmo();
  26. }
  27.  
  28. #region MyRegion
  29.  
  30. public void tvmo() {
  31. tvMov.Nodes.Clear();
  32. TreeNode dd = null;
  33. list = bll.findAll();
  34. foreach (Thelog item in list)
  35. {
  36. dd = new TreeNode();
  37. if (item.Qfatherid == )
  38. {
  39. dd.Tag = item.Qid;
  40. dd.Text = item.Qname;
  41. tvMov.Nodes.Add(dd);
  42. GetNode(dd, item.Qid);
  43. }
  44. }
  45.  
  46. }
  47.  
  48. private void GetNode(TreeNode Qname, int Qid)
  49. {
  50. list = bll.findAll();
  51. TreeNode tn = null;
  52. if (list.Count > )
  53. {
  54. foreach (Thelog drv in list)
  55. {
  56. if (Qid == drv.Qfatherid)
  57. {
  58. tn = new TreeNode();
  59. tn.Tag = drv.Qid;
  60. tn.Text = drv.Qname;
  61. Qname.Nodes.Add(tn);
  62. GetNode(tn, drv.Qid);
  63. }
  64.  
  65. }
  66. }
  67. }
  68.  
  69. #endregion
  70.  
  71. private void button1_Click(object sender, EventArgs e)
  72. {
  73. TreeNode node = tvMov.SelectedNode;
  74. int s = (int)node.Tag;
  75. int i = node.Level;
  76. frmaddlei add = new frmaddlei(s, i, node);
  77. add.Show();
  78. }
  79.  
  80. private void button3_Click(object sender, EventArgs e)
  81. {
  82. TreeNode node = tvMov.SelectedNode;
  83. int id = (int)node.Tag;
  84.  
  85. bool bl = bll.finddel(id);
  86. if (bl)
  87. {
  88. node.Remove();
  89. MessageBox.Show("删除成功!!");
  90. }
  91. else
  92. {
  93. MessageBox.Show("出错啦!!!");
  94. }
  95. }
  96.  
  97. private void button2_Click(object sender, EventArgs e)
  98. {
  99. TreeNode node = tvMov.SelectedNode;
  100. int s = (int)node.Tag;
  101. string i = node.Text;
  102. frmup add = new frmup(s, i, node);
  103. add.Show();
  104. }
  105.  
  106. private void tvMov_AfterSelect(object sender, TreeViewEventArgs e)
  107. {
  108. TreeNode node = tvMov.SelectedNode;
  109. string i = node.Text;
  110.  
  111. MessageBox.Show(i);
  112. }
  113.  
  114. }
  115. }

删除层

  1. using hierarchy.BLL;
  2. using hierarchy.Model;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12.  
  13. namespace hierarchy.UI
  14. {
  15. public partial class frmaddlei : Form
  16. {
  17. public frmaddlei()
  18. {
  19. InitializeComponent();
  20. }
  21. int ss = ;
  22. int ii = ;
  23. TreeNode aodee = null;
  24. public frmaddlei(int s, int i, TreeNode aode)
  25. {
  26. ss = s;
  27. ii = i;
  28. aodee = aode;
  29. InitializeComponent();
  30.  
  31. }
  32. hierarchysBll bll = new hierarchysBll();
  33. private void button1_Click(object sender, EventArgs e)
  34. {
  35. Thelog Thelog = new Thelog();
  36. Thelog.Qname = tbxname.Text;
  37. Thelog.Qfatherid=ii;
  38. Thelog.Qtier = ss;
  39. bool bl = bll.findAdd(Thelog);
  40. if (bl)
  41. {
  42. MessageBox.Show("添加成功");
  43. string guid = Guid.NewGuid().ToString();
  44. TreeNode t = new TreeNode(this.tbxname.Text);
  45. t.Tag = guid;
  46. aodee.Nodes.Add(t);
  47. this.Close();
  48.  
  49. }
  50. }
  51. }
  52. }

Dal层

  1. using hierarchy.Model;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9.  
  10. namespace hierarchy.DAL
  11. {
  12. public class hierarchysDAL
  13. {
  14.  
  15. //01.写一个查询所有年级的方法
  16. public List<Models> findAllGrades()
  17. {
  18. List<Models> list = new List<Models>();
  19. string sql = "select [StudentName] from [Address_IS]";
  20. DataTable table = SQLHelper.ExecuteDataTable(sql);
  21. foreach (DataRow item in table.Rows)
  22. {
  23. Models Models = new Models();
  24. Models.StudentName = item["StudentName"].ToString();
  25. list.Add(Models);
  26. }
  27. return list;
  28.  
  29. }
  30.  
  31. //01.写一个查询所有年级的方法
  32. public List<Thelog> findAll()
  33. {
  34. List<Thelog> list = new List<Thelog>();
  35. string sql = "SELECT * FROM Thelog";
  36. DataTable table = SQLHelper.ExecuteDataTable(sql);
  37. foreach (DataRow item in table.Rows)
  38. {
  39. Thelog Thelog = new Thelog();
  40. Thelog.Qid = Convert.ToInt32(item["qid"]);
  41. Thelog.Qname = item["qname"].ToString();
  42. Thelog.Qtier = Convert.ToInt32(item["qtier"]);
  43. Thelog.Qfatherid = Convert.ToInt32(item["qfatherid"]);
  44. list.Add(Thelog);
  45. }
  46. return list;
  47.  
  48. }
  49.  
  50. public bool findAdd(Thelog Thelog)
  51. {
  52. bool bl = false;
  53. string sql = @"INSERT INTO Thelog(qname,qfatherid,qtier) VALUES(@name,@fatherid,@tid)";
  54. SqlParameter[] paras = {
  55. new SqlParameter("@name", Thelog.Qname),
  56. new SqlParameter("@fatherid", Thelog.Qtier),
  57. new SqlParameter("@tid", Thelog.Qfatherid)
  58. };
  59. int i = (int)SQLHelper.ExecuteNonQuery(sql,paras);
  60. if (i > )
  61. {
  62. bl = true;
  63. }
  64. return bl;
  65.  
  66. }
  67.  
  68. public bool finddel(int id) {
  69. bool bl = false;
  70. string sql = "delete from Thelog where qid=@nid";
  71. SqlParameter[] paras = {
  72. new SqlParameter("@nid",id)
  73. };
  74. int i = (int)SQLHelper.ExecuteNonQuery(sql, paras);
  75. if (i > )
  76. {
  77. bl = true;
  78. }
  79. return bl;
  80. }
  81.  
  82. public bool update(Thelog Thelog)
  83. {
  84. bool bl = false;
  85. string sql = "update Thelog set qname=@name where qid=@id";
  86. SqlParameter[] paras = {
  87. new SqlParameter("@name", Thelog.Qname),
  88. new SqlParameter("@id", Thelog.Qid)
  89. };
  90. int i = (int)SQLHelper.ExecuteNonQuery(sql, paras);
  91. if (i > )
  92. {
  93. bl = true;
  94. }
  95. return bl;
  96. }
  97.  
  98. }
  99. }

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浮点型(float)运算结果不正确处理办法

    一.问题说明 以前对浮点数运行没有没有太在意.昨天同事要求把百分比结果保存到文件上,然后就以保存1位小数的形式给他保存了. 但是今天同事运行时问能不能统一以一位小数的形式保存,当时觉得很奇怪昨天就是以 ...

  2. 算法:输出一个整数(不用ToString方法)

    1.递归实现 static void Main(string[] args) { Console.WriteLine("Pls input a number:"); int p = ...

  3. Abp 中 模块 加载及类型自动注入 源码学习笔记

    注意 互相关联多使用接口注册,所以可以 根据需要替换. 始于 Startup.cs 中的  通过 AddApplication 扩展方法添加 Abp支持 1 services.AddApplicati ...

  4. Mdate时间插件

    在做移动端的页面时,用户报名某个活动,需要填写她的出生日期,这时可以用Mdate插件来完成,已达到更好的用户体验 操作很简单,效果也不错,是滑动选择时间的,也有回调函数方便我们使用.只需要在页面中引入 ...

  5. closures

     一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...

  6. 华为S5700设置vlan,并绑定电脑的IP地址与mac地址。

    要求是设置两个vlan,10和20.交换机下的10网段和20网段的电脑在两个vlan当中.20网段的ip地址与mac地址绑定,从而实现下面的电脑更改ip地址或者不明来源的电脑不能连接到交换机. 1.s ...

  7. C_program assignment 2

    /* Name: C program assignment 2 Copyright: Author: ShiroKa_X Date: 22/03/17 14:07 Description: */ #i ...

  8. Android向通讯录添加联系人的一般方法

    Android向通讯录添加联系人的一般方法 以一个简单的例子加以说明,记得需要相应的权限: 测试代码,关键的内容就在add函数里面. package zhangphil.demo; import an ...

  9. Beta冲刺三

    Beta冲刺三 1.团队TSP 团队任务 预估时间 实际时间 完成日期 对数据库的最终完善 120 150 12.2 对学生注册功能的完善——新增触发器 150 140 11.29 对教师注册功能的完 ...

  10. C++笔记之关键字explicit

    在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: explicit 关键字只能用 ...