-
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#程序设计有所帮助。
栏目列表
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
数据库审计与智能监控:从日志分析到异
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比