数据库结构

id:int类型,主键,自增列;

    Name:char类型;

    paraid:int类型

窗台拖入控件treeview。

1.版本1

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11.  
  12. namespace _1.多级菜单
  13. {
  14. public partial class Form1 : Form
  15. {
  16. //获取链接
  17. string ConnString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnSring"].ToString();
  18. public Form1()
  19. {
  20. InitializeComponent();
  21. }
  22.  
  23. private void Form1_Load(object sender, EventArgs e)
  24. {
  25. this.LoadData(null);
  26. }
  27. /// <summary>
  28. /// 载入tn的所有子节点,如果tn=null,说明是跟节点
  29. /// </summary>
  30. /// <param name="tn"></param>
  31. private void LoadData(TreeNode tn)
  32. {
  33. if (tn == null)
  34. {
  35. //为空说明是根节点,添加节点时直接在控件的Nodes属性上添加就行了
  36. using (SqlConnection conn = new SqlConnection(ConnString))
  37. {
  38. //查找根节点 所以parenti=0
  39. string sql = "select * from Table_Tree where parentid=0";
  40. using (SqlCommand cmd = new SqlCommand(sql, conn))
  41. {
  42. conn.Open();
  43. using (SqlDataReader dr = cmd.ExecuteReader())
  44. {
  45. while (dr.Read())
  46. {
  47. TreeNode cNode = new TreeNode();
  48. cNode.Text = dr["name"].ToString();
  49. cNode.Tag = dr["Id"];//tag没有意义,不被现实出来,所以就存储id
  50. treeView1.Nodes.Add(cNode);//节点加到treeview
  51. LoadData(cNode);
  52.  
  53. }
  54. }
  55. }
  56. }
  57.  
  58. }
  59. else
  60. {
  61. //参数tn!=null 那就是说要找tn的所有子节点,并做为tn的子节点.怎么在tn这个节点上添加子节点呢? tn.Nodes.Add(cNode);
  62. using (SqlConnection conn = new SqlConnection(ConnString))
  63. {
  64. //查找根节点 所以parenti=0
  65. string sql = "select * from Table_Tree where parentid=@id";
  66. using (SqlCommand cmd = new SqlCommand(sql, conn))
  67. {
  68. cmd.Parameters.AddWithValue("@Id", tn.Tag);//tn是TreeNode对象
  69. conn.Open();
  70. using (SqlDataReader dr = cmd.ExecuteReader())
  71. {
  72.  
  73. while (dr.Read())
  74. {
  75. TreeNode cNode = new TreeNode();
  76. cNode.Text = dr["name"].ToString();
  77. cNode.Tag = dr["Id"];//tag没有意义,不被现实出来,所以就存储id
  78. tn.Nodes.Add(cNode);
  79. LoadData(cNode);
  80.  
  81. }
  82. }
  83. }
  84. }
  85.  
  86. }
  87. }
  88. }
  89. }
    运行结果:

2.版本2(数据库相同)

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Windows.Forms;
  10.  
  11. namespace _02Tree
  12. {
  13. public partial class Form1 : Form
  14. {
  15. string ConnString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnString"].ToString();
  16. public Form1()
  17. {
  18. InitializeComponent();
  19. }
  20.  
  21. private void Form1_Load(object sender, EventArgs e)
  22. {
  23. this.LoadData(null);
  24. }
  25. /// <summary>
  26. /// 载入tn的所有子节点,如果tn=null,说明载的是根节点
  27. /// </summary>
  28. private void LoadData(TreeNode tn)
  29. {
  30. //获得要添加的节点
  31. List<TblTree> addNodes = this.GetNodesByParentId(tn == null ? : Convert.ToInt32(tn.Tag));
  32.  
  33. foreach (var oneNode in addNodes)
  34. {
  35. TreeNode ctNode = new TreeNode();
  36. ctNode.Text = oneNode.Name;
  37. ctNode.Tag = oneNode.Id;
  38. if (tn == null)
  39. {
  40. //如果是要节点,添加到控件上
  41. treeView1.Nodes.Add(ctNode);
  42. }
  43. else
  44. {
  45. //如果tn不为null,说明要为tn添加子节点,所以我们就添加到tn上
  46. tn.Nodes.Add(ctNode);
  47. }
  48. this.LoadData(ctNode);//调用自己,为ctNode添加子节点
  49. }
  50. }
  51. private List<TblTree> GetNodesByParentId(int parentId)
  52. {
  53. List<TblTree> allNodes = new List<TblTree>();
  54.  
  55. string sql = "select * from Table_Tree where parentid=@id";
  56. SqlDataReader dr = CommonCode.Sqlhelper.ExecuteReader(sql, new SqlParameter("@id", parentId));
  57. while (dr.Read())
  58. {
  59. TblTree oneNode = new TblTree();
  60. oneNode.Name = dr["name"].ToString();
  61. oneNode.Id = Convert.ToInt32(dr["id"]);
  62. oneNode.Parentid = parentId;
  63. allNodes.Add(oneNode);
  64. }
  65. dr.Close();
  66. return allNodes;
  67. }
  68. }
  69. }
    运行效果图:

还有TblTree类:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace _02Tree
  7. {
  8. public class TblTree
  9. {
  10. int id;
  11.  
  12. public int Id
  13. {
  14. get { return id; }
  15. set { id = value; }
  16. }
  17. string name;
  18.  
  19. public string Name
  20. {
  21. get { return name; }
  22. set { name = value; }
  23. }
  24. int parentid;
  25.  
  26. public int Parentid
  27. {
  28. get { return parentid; }
  29. set { parentid = value; }
  30. }
  31.  
  32. }
  33. }
    数据库通用公共类:版本1和版本2通用
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. using System.Linq;
  6. using System.Text;
  7.  
  8. namespace CommonCode
  9. {
  10. public static class Sqlhelper
  11. {
  12. private static readonly string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
  13. //执行数据库无非就是执行cmd的以下方法
  14. //1. ExecuteNonQuery 执行一个insert update delete
  15. public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
  16. {
  17. using (SqlConnection conn = new SqlConnection(ConnectionString))
  18. {
  19. using (SqlCommand cmd = new SqlCommand(sql, conn))
  20. {
  21. cmd.Parameters.AddRange(parameters);
  22. conn.Open();
  23. return cmd.ExecuteNonQuery();
  24. }
  25. }
  26.  
  27. }
  28. //2.ExecuteScaler 返回结果集的第一行第一列
  29. public static object ExecuteScaler(string sql, params SqlParameter[] parameters)
  30. {
  31. using (SqlConnection conn = new SqlConnection(ConnectionString))
  32. {
  33. using (SqlCommand cmd = new SqlCommand(sql, conn))
  34. {
  35. cmd.Parameters.AddRange(parameters);
  36. conn.Open();
  37. return cmd.ExecuteScalar();
  38. }
  39. }
  40. }
  41.  
  42. //3.ExecuteReader 返回一个Reader对象,用于读于多行多列数据
  43. //在数据库上产生一个结果集,每次Read,从数据库服务器上读取一条数据回来,所以使用Reader读取数据,不能与数据库断开连接.
  44. public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters)
  45. {
  46. SqlConnection conn = new SqlConnection(ConnectionString);
  47.  
  48. using (SqlCommand cmd = new SqlCommand(sql, conn))
  49. {
  50. cmd.Parameters.AddRange(parameters);
  51. conn.Open();
  52. try
  53. {
  54. //在sqlhelper中,由于dr在返回给用户使用,所以注意dr不要使用using(){]
  55. SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  56.  
  57. return dr;
  58.  
  59. }
  60. catch (Exception ex)
  61. {
  62. conn.Close();
  63. throw ex;
  64.  
  65. }
  66.  
  67. }
  68. }
  69.  
  70. //4.执行一个sql语句,并把结果集放入本地的DataTable中.这里数据已
  71. //经放到本地,断开数据库连接,还是可以访问到数据的.
  72. public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
  73. {
  74. using (SqlConnection conn = new SqlConnection(ConnectionString))
  75. {
  76. using (SqlDataAdapter da = new SqlDataAdapter(sql, conn))
  77. {
  78. da.SelectCommand.Parameters.AddRange(parameters);
  79. DataTable dt = new DataTable();
  80. //Fill方法其实执行的是da.SelectCommand中的sql语句,这里可以写conn.open也可以不写,如果不写,da会自动连接数据库
  81. da.Fill(dt);
  82. return dt;
  83. }
  84. }
  85. }
  86. }
  87. }
  1.  
  1.  

treeview(树加载)的更多相关文章

  1. WinForm 进程、线程、TreeView递归加载、发送邮件--2016年12月13日

    进程:一个程序就是一个进程,但是也有一个程序需要多个进程来支持的情况 进程要使用的类是:Process它在命名空间:System.Diagnostics; 静态方法Start(); Process.S ...

  2. winform进程、线程、TreeView递归加载

    进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程所使用的类:Process 所需命名空间:System.Diagnostics; 可以通过进行来开启计算机上现有的 ...

  3. 页面全部加载完毕和页面dom树加载完毕

    dom树加载完毕 $(document).ready()//原生写法document.ready = function (callback) {            ///兼容FF,Google   ...

  4. 伟景行 citymaker 从入门到精通(2)——工程图层树加载

    工程树是指explorer左边这棵树 本例子实现了图层树加载,点击节点切换可视状态 树控件使用easyui的树 html部分 onCheck:treeProjectTreeOnCheck是指树节点的o ...

  5. Devexpress WinForm TreeList的三种数据绑定方式(DataSource绑定、AppendNode添加节点、VirtualTreeGetChildNodes(虚拟树加载模式))

    第一种:DataSource绑定,这种绑定方式需要设置TreeList的ParentFieldName和KeyFieldName两个属性,这里需要注意的是KeyFieldName的值必须是唯一的. 代 ...

  6. Jquery插件 之 zTree树加载

    原文链接:https://blog.csdn.net/jiaqu2177/article/details/80626730 zTree树加载 zTree 是一个依靠 jQuery 实现的多功能 “树插 ...

  7. asp.net treeview 异步加载

    在使用TreeView控件的时候,如果数据量太大,这个TreeView控件加载会很慢,有时甚至加载失败, 为了更好的使用TreeView控件加载大量的数据,采用异步延迟加载TreeView. 在Tre ...

  8. 向treeview中加载数据

    1.获取树节点的值,用事件AfterSelect加载(id值的获取,用name来获取) 2.双击treeview控件得到 private void treeView1_AfterSelect(obje ...

  9. 爱上MVC3~MVC+ZTree大数据异步树加载

    回到目录 理论部分: MVC+ZTree:指在.net MVC环境下进行开发,ZTree是一个jquery的树插件 大数据:一般我们系统中,有一些表结构属于树型的,如分类,地域,菜单,网站导航等等,而 ...

  10. MVC小系列(十四)【MVC+ZTree大数据异步树加载】

    ZTree是一个jquery的树插件可以异步加载 第一步定义一个标准的接口(指的是与ztree默认的数据元素保持一致) /// <summary> /// ZTree数据结构 /// &l ...

随机推荐

  1. thinkPHP的优缺点

    适合大量重复的工作,但不太灵活...

  2. web.xml配置文件元素详解

    一.web.xml配置文件常用元素及其意义 1 <web-app> 2 3 <!--定义了WEB应用的名字--> 4 <display-name></disp ...

  3. 转)tslib机制分析

    估计大家都听说过tslib,其实从他的名字就可以看出它的,它是touchscreen的lib,其实这样还不够具体,其实它开始确实是为了touchscreen的鼠标驱动而发展起来的,且只是一个中间处理库 ...

  4. Windows App开发之集成设置、帮助、搜索和共享

    应用设置和应用帮助 "设置"合约 上一节中我们学习了怎样将应用设置保存到本地.这样的方式是通过在App内加入设置选项,这里另一种方式. 微软将其称为"设置"合约 ...

  5. 【Java面试题】45 什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。

    我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java对象 ...

  6. Git 基础 - 查看提交历史

    查看提交历史 在提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 git log 命令查看. 接下来的例子会用我专门用于演示的 simplegit 项目,运行下面的命令获取该项目源 ...

  7. SQLServer------Sql Server性能优化辅助指标SET STATISTICS TIME ON和SET STATISTICS IO ON

    转载: http://www.cnblogs.com/xqhppt/p/4041799.html

  8. php 实现 java com.sun.org.apache.xml.internal.security.utils.Base64 Byte数组加密

    <?php function java_base64_encode($arr){ $str = ''; foreach ($arr as $key => $value) { $str .= ...

  9. 集群--LVS的介绍

       相关概念 LVS体系结构如图所示,一组服务器通过高速的局域网或者地理分布的广域网相互连接,在它们的前端有一个负载调度器(Load Balancer).负载调度器能无缝地将网络请求调度到真实服务器 ...

  10. cocos2dx游戏--欢欢英雄传说--添加游戏背景

    经过一段时间的学习cocos2dx,接下来我想要实践开发一个小游戏,我把它命名为“欢欢英雄传说”,项目名将取为HuanHero.环境:cocos2dx环境:cocos2d-x 3.11.1IDE:Co ...