时间:2021-05-20
本文实例讲述了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("");
}
}
这里要注意,每个结点加完后,要加上一个空的子结点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);
}
}
}
}
希望本文所述对大家的C#程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
react-router4如何去实现按需加载Component,在router4以前,我们是使用getComponent的方式来实现按需加载的,router4中
前言本文介绍的是自定义require函数让浏览器实现按需加载Js文件,那到底要怎么自己写一个按需加载的库呢为了实现按需加载://这是我们要实现的功能,requi
本文使用的React-router版本为2.8.1ReactRouter自己就有一套按需加载解决方案,将代码拆分成多个小包,在浏览过程中实现按需加载;如过你的项
importwebpack根据ES2015loader规范实现了用于动态加载的import()方法。这个功能可以实现按需加载我们的代码,并且使用了promise
说实话,我一开始也不知道什么叫按需加载组件,组件还可以按需加载???后来知道了学不完啊...没关系,看我的按需加载组件,或者异步组件,主