winform 中treeview结点如何异步加载?

wxl_miracle 2006-02-10 11:11:39
最开始只显示根结点,当点击根结点的时候再加载对应的子结点
麻烦各位给个思路

...全文
484 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxl_miracle 2006-02-10
  • 打赏
  • 举报
回复
上面的回复是我另外一个帐号的
把解决的方法贴出来希望对大家有帮助
wxl_pilot 2006-02-10
  • 打赏
  • 举报
回复
treeView 的MouseDown事件
private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (treeView1.GetNodeAt(e.X,e.Y) != null && treeView1.GetNodeAt(e.X,e.Y).Tag != null)
{
treeView1.GetNodeAt(e.X,e.Y).Nodes.RemoveAt(0);
this.treeView1.GetNodeAt(e.X,e.Y).Nodes.Add("haha");
}
}
}
wxl_miracle 2006-02-10
  • 打赏
  • 举报
回复
顶一下
wxl_miracle 2006-02-10
  • 打赏
  • 举报
回复
this.treeView1.SelectedNode.Nodes获取的是选种的结点,所以出现上面的问题
Click事件如何获取用户当前点击的结点而不是选中的结点?
wxl_miracle 2006-02-10
  • 打赏
  • 举报
回复
就是因为数据量庞大,有几十万条记录,所以才想到要异步加载
否则应用程序很容易当掉

cncxz(虫虫) 和jiezhi(风满袖) 两位的方法我已经想到了
不过到底在执行什么事件的时候删除那个非真实数据的节点我还是有些疑问
在Click事件中删除操作似乎只对顶部结点起作用
比如:
+ 11111
-loading ……
+ 22222
-loading ……
+ 33333
-loading ……
在treeView的click事件中是这样写的:
if (this.treeView1.SelectedNode.Nodes.Count != 0)
{
this.treeView1.SelectedNode.Nodes.RemoveAt(0);
this.treeView1.SelectedNode.Nodes.Add("haha");
}
不过只有点击11111的时候才会将loading替换为haha
wangzk0206 2006-02-10
  • 打赏
  • 举报
回复
up
bleempan 2006-02-10
  • 打赏
  • 举报
回复
把数据以xml格式存起来,处理起来也很方便,你可以试试.
lovvver 2006-02-10
  • 打赏
  • 举报
回复
感觉你这么做比较复杂,而且操作起来会感觉很慢。
如果不是数据量非常大的话,不如一次搞顶。
(当然你可以把所有树节点的数据都存放在本地,当点击的时候再加。)
jiezhi 2006-02-10
  • 打赏
  • 举报
回复
你先添加一个根节点,然后给根节点添加一个非真实数据的节点,以让其呈现+号,让用户感觉有下级节点,然后在click事件里面获得当前点击节点的id,然后得到其下级节点,然后加载之,后面节点的处理和根节点的处理类似...

如果节点数量不是很多的话,那没有必要如此处理了
cncxz 2006-02-10
  • 打赏
  • 举报
回复
窗体打开时加载顶级节点

然后在节点的BeforeExpand事件中编写加载该节点的子节点数据的代码

注意,针对每个有效节点都得增加一个无效的空节点,这样才会出现展开按钮

而在加载了该节点的子节点数据后,再把空节点删除,

而在加载子节点数据前,应该判断本节点是否包含那个空节点,只有包含时才有必要加载数据

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧