有关treeview添加节点的问题?

君子之交淡如水 2012-05-30 09:53:59
用一个Treeview来接收任意个Xml文件,以前我是用递归来实现的,但组长说递归处理大型的Xml文件会很慢,让我用虚节点方法来实现(具体方法的名字也许跟这有出处),这个方法的意思是先添加根节点,点击根节点那个“+”号后又立刻添加根节点下的子节点,再点击根节点下的子节点的那个“+”后,又添加此节点的子节点,以此反复,如果用户不点击那个“+”,按组长的意思就是不添加选中节点的子节点(表述不好,见谅!),请问这个怎么实现呢,哪位高手帮下忙,谢谢!!!
...全文
93 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
removeLove 2012-05-30
  • 打赏
  • 举报
回复
在几点展开的时候去加载该节点下的数据
//展开节点前
private void tvReport_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
//如果节点下的没有子节点,返回
if (e.Node.Nodes.Count == 0)
return;
for (int i = 0; i < e.Node.Nodes.Count; i++)
{
//如果是已经加载过的返回
if (e.Node.Nodes[i].Nodes.Count != 0)
{
break;
}
//加载节点下的子节点的子节点
TB_BG bgList = (e.Node.Nodes[i].Tag as TB_BG);
List<TB_BG> currentList = bgManage.GetModelList(" BG_FLXH=" + bgList.BG_XH);
AddNode(e.Node.Nodes[i], false);
}
}
熙风 2012-05-30
  • 打赏
  • 举报
回复
       /// <summary>
/// 添加目录树节点的展开事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tvDir_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
this.GetSubTreeNodes(e.Node);

}

/// <summary>
/// 获取指定节点下的次两级子节点
/// </summary>
/// <param name="currNode">指定的节点信息</param>
private void GetSubTreeNodes(TreeNode currNode)
{
DataSet ds = new DataSet();
foreach (TreeNode tmpNode in currNode.Nodes)
{
if (tmpNode.Nodes.Count == 0)
{
ModelOperation.ElementList eleListMode = (ModelOperation.ElementList)tmpNode.Tag;

if (!eleListMode.IsElement) // true: 是会后一级
{
ds = eleListDAL.GetElementListByUpList(eleListMode.ListId, ListType);
if ((null != ds) && (ds.Tables.Count > 0))
{
DataTable tmpTab = ds.Tables[0];

foreach (DataRow row in tmpTab.Rows)
{
TreeNode node = new TreeNode(row["listname"].ToString());
ModelOperation.ElementList subeleListMode = this.CreateElementListObj(row); // 创建目录信息的实体对象

node.Tag = subeleListMode;


tmpNode.Nodes.Add(node);
}
}
}

}
}
bdmh 2012-05-30
  • 打赏
  • 举报
回复
先选出最顶级节点,添加到tree,这是根节点,然后点击加号时,触发BeforeExpand事件,在这里根据当前节点的内容,再去筛选xml的下一层节点,然后添加到当前节点的下级
一、简介 通过这个课程带大家从零开发一款功能全面的后台管理系统,包括项目搭建、功能实现到最后的Linux系统部署全过程。本课程使用SpringMVC + Spring + Mybatis作为主体框架,使用AdminLTE作为前端框架,使用主流关系型数据库Mysql作为存储数据库,使用非关系型数据库Redis作为缓存数据库,并集成SpringSecuriy安全框架做权限的动态管理,集成Swagger2自动生成接口文档,集成Druid连接池进行SQL性能监控,集成ActiveMQ消息中间件进行异步解耦,提高性能。最后使用linux系统进行服务部署,并搭建nginx反向代理服务器提高网站性能。 二、学习目标 通过本课程的学习带大家掌握SSM框架的开发流程,并熟练使用SpringSecurity做为安全框架进行权限管理,整合相关优秀的开源框架进行功能开发。还在项目中带大家学习前端相关的Jquery、Bootstrap等知识。课程结束之后希望大家能做到独立进行开发项目的目的,增强解决问题的能力,具备功能落地实现的能力。 三、课程涉及知识点 SpringMVC源码分析Mybatis源码分析通用MapperMysql数据库Redis缓存实现ActiveMQ消息中间件SpringSecurity鉴权Swagger2接口文档生成自定义注解AOP切面编程自定义过滤器Logback日志整合Druid性能监控Linux系统Nginx反向代理Ajax异步请求技术Jquery基本使用AdminLTE前端框架Chart图表-线状图和饼状图百度地图定位城市BootStrap前端框架BootStrap-Table插件BootStrap-Treeview插件Markdown编辑器403、404、500错误页面配置数据库事务消息提示插件toastr.js图片上传插件bootstrap fileinput数字滚动效果pv/uv流量统计...四、课程部分内容截图如下 1、首页 2、菜单管理 3、图床管理 4、图标管理 5、留言反馈管理 6、druid监控 7、登录日志

110,533

社区成员

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

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

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