using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 将单表数据加载到TreeView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string constr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString; #region 这是删除节点的代码
private void btnDelete_Click(object sender, EventArgs e)
{
DeleteNodes(tvList.SelectedNode.Tag.ToString());
//将当前用户选定的节点删除(含所有子节点)
tvList.SelectedNode.Remove();
}
public void DeleteNodes(string id)
{
string sql1 = "select AreaId from TblArea where AreaPId=@PID";
DataTable dt = this.ExecuteDataTable(sql1, new SqlParameter("@PID", id));
foreach (DataRow item in dt.Rows)
{
DeleteNodes(item[].ToString());
}
string sql = "delete from TblArea where AreaId=@ID";
this.ExecuteNonQuery(sql, new SqlParameter("@ID", id)); }
//public DataTable ExecuteDataTable(string sql, params SqlParameter[] param)
//{
// DataTable dt = new DataTable();
// using (SqlDataAdapter adapter = new SqlDataAdapter(sql, constr))
// {
// if (param != null)
// {
// adapter.SelectCommand.Parameters.AddRange(param);
// }
// adapter.Fill(dt);
// }
// return dt;
//}
public int ExecuteNonQuery(string sql, params SqlParameter[] param)
{
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (param != null)
{
cmd.Parameters.AddRange(param);
}
con.Open();
return cmd.ExecuteNonQuery();
}
}
}
#endregion #region 3. 给Node添加点击事件,然后加载其子节点
private void btnAppend_Click(object sender, EventArgs e)
{
//貌似这个是单击此节点的事件。事实上是上一个选中节点的事件
//就算你初始化了某个节点 tvList.Nodes[0].Checked = true;
//但是tvList.Nodes[0].IsSelected = false; 所以不用这个,用这个也可以:
//加一些东西:
tvList.NodeMouseClick += tvList_NodeMouseClick;
//用这个:
//tvList.AfterSelect += tvList_AfterSelect;
ThirdDeepList(.ToString(), tvList.Nodes);
} void tvList_AfterSelect(object sender, TreeViewEventArgs e)
{
#region 这是追加节点的代码
//string id = e.Node.Tag.ToString();
//this.ThirdDeepList(id, ((TreeView)sender).SelectedNode.Nodes);
#endregion
} void tvList_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
string id = e.Node.Tag.ToString();
//this.ThirdDeepList(id, ((TreeView)sender).SelectedNode.Nodes);
//加的东西
this.ThirdDeepList(id, e.Node.Nodes);
} private void ThirdDeepList(string id, TreeNodeCollection treeNodeCollection)
{
string sql = "select AreaId ,AreaName from TblArea where AreaPId=@PID";
using (DataTable dt = this.ExecuteDataTable(sql, new SqlParameter("@PID", id)))
{
int count = dt.Rows.Count;
if (count > )
{
for (int i = ; i < count; i++)
{
TreeNode tn = treeNodeCollection.Add(dt.Rows[i][].ToString());
tn.Tag = dt.Rows[i][].ToString();
}
}
}
} public DataTable ExecuteDataTable(string sql, params SqlParameter[] param)
{
DataTable dt = new DataTable();
using (SqlDataAdapter adapter = new SqlDataAdapter(sql, constr))
{
if (param != null)
{
adapter.SelectCommand.Parameters.AddRange(param);
}
adapter.Fill(dt);
}
return dt;
}
#endregion //#region 2. 使用递归
////这样写表面上代码看起来没问题。实际上是严重的性能消耗的失败品......
//private void btnAppend_Click(object sender, EventArgs e)
//{
// SecondDeepList(0.ToString(), tvList.Nodes);
//}
//private void SecondDeepList(string id, TreeNodeCollection tnc)
//{
// string sql = "select * from TblArea where AreaPId=@PID";
// using (SqlDataReader reader = this.ExecuteReader(sql, new SqlParameter("@PID", id)))
// {
// if (reader.HasRows)
// {
// while (reader.Read())
// {
// TreeNode tn = tnc.Add(reader[1].ToString());
// tn.Tag = reader[0].ToString();
// this.SecondDeepList(tn.Tag.ToString(), tn.Nodes);
// }
// }
// }
//}
//private SqlDataReader ExecuteReader(string sql, params SqlParameter[] param)
//{
// SqlConnection con = new SqlConnection(constr);
// using (SqlCommand cmd = new SqlCommand(sql, con))
// {
// if (param != null)
// cmd.Parameters.AddRange(param);
// con.Open();
// return cmd.ExecuteReader(CommandBehavior.CloseConnection);
// }
//}
//#endregion //#region 1. 一下子全部加载到TreeView上来。不提倡,给用户感觉程序不“利索”
//private void btnAppend_Click(object sender, EventArgs e)
//{
// string sql = "select * from TblArea where AreaPId=@PID";
// string PID = "0";
// DataTable dt = this.ExecuteDataTable(sql, new SqlParameter("@PID", PID));
// int count = dt.Rows.Count;
// if (count > 0)
// {
// for (int i = 0; i < count; i++)
// {
// TreeNode tn = tvList.Nodes.Add(dt.Rows[i][1].ToString());
// tn.Tag = dt.Rows[i][0].ToString();
// this.FirstDeepList(tn.Tag.ToString(), tn);
// }
// }
//}
//public void FirstDeepList(string id, TreeNode tn)
//{
// string sql = "select AreaId ,AreaName from TblArea where AreaPId=@PID";
// string PID = id;
// DataTable dt = this.ExecuteDataTable(sql, new SqlParameter("@PID", id));
// int count = dt.Rows.Count;
// if (count > 0)
// {
// for (int i = 0; i < count; i++)
// {
// TreeNode newtn = tn.Nodes.Add(dt.Rows[i][1].ToString());
// newtn.Tag = dt.Rows[i][0].ToString();
// this.FirstDeepList(newtn.Tag.ToString(), newtn);
// }
// }
//}
//public DataTable ExecuteDataTable(string sql, params SqlParameter[] param)
//{
// DataTable dt = new DataTable();
// using (SqlDataAdapter adapter = new SqlDataAdapter(sql, constr))
// {
// if (param != null)
// {
// adapter.SelectCommand.Parameters.AddRange(param);
// }
// adapter.Fill(dt);
// }
// return dt;
//}
//#endregion
}
}

项目数据文件:http://pan.baidu.com/s/1gd3gifL

单表数据加载到TreeView(.Node.Level>=2) "蝴蝶效应" SelectedNode注意事项 效能优化 综合问题的更多相关文章

  1. 九:MVC主从表数据加载

    EF对关联表数据加载的三种方式: 延迟加载:只有在需要的时候加载数据.EF默认的加载方式. 贪婪加载:一次性组织好数据,全部加载到内存中. 显式加载:需要通过代码手动加载关联表. 延迟加载 virtu ...

  2. 第2节 hive基本操作:11、hive当中的分桶表以及修改表删除表数据加载数据导出等

    分桶表 将数据按照指定的字段进行分成多个桶中去,说白了就是将数据按照字段进行划分,可以将数据按照字段划分到多个文件当中去 开启hive的桶表功能 set hive.enforce.bucketing= ...

  3. 省市数据递归加载到TreeView

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. MYSQL(将数据加载到表中)

    1. 创建和选择数据库 mysql> CREATE DATABASE menagerie; mysql> USE menagerie Database changed 2. 创建表 mys ...

  5. flask+sqlite3+echarts3+ajax 异步数据加载

    结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...

  6. 实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)

    实现虚拟模式的即时数据加载Windows窗体DataGridView控件 .net 4.5 原文地址 :http://msdn.microsoft.com/en-us/library/ms171624 ...

  7. ECharts动态数据加载

    最近有用到ECharts做可视化报表,小结一下 一.准备数据 1.官网下载echarts.min.js 2.引入jquery.js 3.请求用的json数据 { "list":[ ...

  8. MySQL单表数据不超过500万:是经验数值,还是黄金铁律?

    今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢? 曾经在中国互联网技术圈广为流传着这么一个 ...

  9. MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?

    本文阅读时间大约3分钟. 梁桂钊 | 作者 今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢 ...

随机推荐

  1. Java中lang包的常用方法介绍

    JAVA API(图片来源:实验楼) 包装类 Integer包装类 方法 返回值 功能描述 byteValue() byte 以 byte 类型返回该 Integer 的值 intValue() in ...

  2. 温故知新-快速理解zookeeper功能&应用&选举机制

    文章目录 zookeeper简介 什么是zookeeper zookeeper应用场景 zookeeper特点 zookeeper的角色 zookeeper的数据模型 节点数据结构 节点类型 zook ...

  3. HttpUtil工具类,发送Get/Post请求,支持Http和Https协议

    HttpUtil工具类,发送Get/Post请求,支持Http和Https协议 使用用Httpclient封装的HttpUtil工具类,发送Get/Post请求 1. maven引入httpclien ...

  4. Jmeter(八) - 从入门到精通 - JMeter配置元件(详解教程)

    1.简介 JMeter配置元件可以用来初始化默认值和变量,读取文件数据,设置公共请求参数,赋予变量值等,以便后续采样器使用.将在其作用域的初始化阶段处理.配置元件(Config Element)提供对 ...

  5. 2w字长文!手撸一套 Java 基础面试题

    Java 基础篇 Java 有哪些特点 并发性的: 你可以在其中执行许多语句,而不必一次执行它 面向对象的:基于类和面向对象的编程语言. 独立性的: 支持一次编写,到处运行的独立编程语言,即编译后的代 ...

  6. Py中去除列表中小于某个数的值

    ### Py去除列表中小于某个数的值 print('*'*10,'Py去除列表中小于某个数的值','*'*10) nums = [2,3,4,10,9,11,19,14] print('*'*10,' ...

  7. MongoDB 基础知识学习笔记

    注意:本文假设您已经安装好 MongoDB 数据库并启动它了. 连接 MongoDB.数据库操作.集合操作 连接 MongoDB mongo ip:port/dbName -u username -p ...

  8. CODING DevOps 系列第一课:基于开源工具链打造持续交付平台

    当下软件发展趋势 当今 IT 行业发展中比较流行的几个技术,首先是微服务化,将原有的一个系统拆分成多个,意味着有多个系统需要构建.测试.部署和运维. 第二个是敏捷开发模式,需求粒度更细化,要求一个可独 ...

  9. 5.kubernetes的服务暴露插件-Traefik

    目录 1.部署traefik 2.准备资源配置清单 3.应用资源配置清单 4.检查创建资源 5.解析域名 6.配置反向代理 7.浏览器访问 部署traefik 在HDSS7-200.host.com上 ...

  10. 总结下c/c++的一些调试经验

    工作2年,干了一年ARM平台嵌入式,一年后台,总结下这两年开发中调试的经验.我把调试手段分成2种:打印日志和用工具分析.因为平时主要开发在Linux平台,就以GDB为例 一.打印日志 1. 合理设置日 ...