-
C#教程之Winform中Treeview实现按需加载的方法
本文实例讲述了Winform中Treeview实现按需加载的方法,非常具有实用价值。分享给大家供大家参考。具体分析如下:
最近项目里用到treeview,原先设计的是一开始就把所有数据都加载到treeview里,后来发现客户的数据量实在太大,加载所有数据要2分钟,这个是客户没法接受的。后来就考虑到用户也不是一开始就要看所有的数据,用户也是一层一层地展开,所以我们就考虑是不是可以实现以当用户展开某个结点时才加载当前结点下面的数据。一番查找后,发现treeview有BeforeExpand事件可以实现我们的需求。
下面介绍具体的实现代码:
1. 首先只加载各部门(结点)的信息
复制代码 代码如下:
List<string> m_Departments = new List<string>() { "湖北.黄石", "湖北.鄂州", "湖北.武汉" };
private void AddDepartMents(List<string> departments)
{
if (m_Root == null)
{
var root = departments[0].Split('.')[0];
m_Root = new TreeNode(root);
m_Root.Tag = root;
treeView1.Nodes.Add(m_Root);
}
foreach (var department in departments)
{
var parent = m_Root;
var dts = department.Split('.');
for (int i = 1; i < dts.Length; i++)
{
if (!m_OrgNodeManager.ContainsKey(dts[i]))
{
var child = new TreeNode(dts[i],1,1);
child.Tag = dts[i];
child.ToolTipText = department;
m_OrgNodeManager.Add(dts[i], child);
parent.Nodes.Add(child);
parent = child;
}
}
parent.Nodes.Add("");
}
}
private void AddDepartMents(List<string> departments)
{
if (m_Root == null)
{
var root = departments[0].Split('.')[0];
m_Root = new TreeNode(root);
m_Root.Tag = root;
treeView1.Nodes.Add(m_Root);
}
foreach (var department in departments)
{
var parent = m_Root;
var dts = department.Split('.');
for (int i = 1; i < dts.Length; i++)
{
if (!m_OrgNodeManager.ContainsKey(dts[i]))
{
var child = new TreeNode(dts[i],1,1);
child.Tag = dts[i];
child.ToolTipText = department;
m_OrgNodeManager.Add(dts[i], child);
parent.Nodes.Add(child);
parent = child;
}
}
parent.Nodes.Add("");
}
}
这里要注意,每个结点加完后,要加上一个空的子结点parent.Nodes.Add(""); 不然就没有那个加号让你点了。
2. 实现BeforeExpand事件
复制代码 代码如下:
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
TreeNode curentNode = e.Node;
if (curentNode.ImageIndex == 1)
{
curentNode.Nodes.Clear();
foreach (var user in m_UserManager)
{
if (user.Value.ToString() == curentNode.ToolTipText.ToString())
{
TreeNode userNode = new TreeNode(user.Key);
curentNode.Nodes.Add(userNode);
}
}
}
}
{
TreeNode curentNode = e.Node;
if (curentNode.ImageIndex == 1)
{
curentNode.Nodes.Clear();
foreach (var user in m_UserManager)
{
if (user.Value.ToString() == curentNode.ToolTipText.ToString())
{
TreeNode userNode = new TreeNode(user.Key);
curentNode.Nodes.Add(userNode);
}
}
}
}
希望本文所述对大家的C#程序设计有所帮助。
栏目列表
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比