根据list生成TreeView

现在好多都是根据一个根节点ID去绑定的,我不需要这种,需要一个根据任意list生成TreeView的程序,用递归或者别的方法都行... 现在好多都是根据一个根节点ID去绑定的,我不需要这种,需要一个根据任意list生成TreeView的程序,用递归或者别的方法都行 展开
 我来答
飘逸潇洒哥
2012-03-10 · TA获得超过320个赞
知道小有建树答主
回答量:217
采纳率:0%
帮助的人:189万
展开全部
如果要实现不同层级的树,你的list里面的每个对象必须标明他们之间的父子关系。现在假定实现一个菜单集合绑定到TreeView,用的是递归的方法:
private void LoadTree(TreeNodeCollection nodes, int parentId)
{
var listAdminMenu = CurrentStationMenus.Where(t => t.ParentID == parentId);
if (listAdminMenu.Count() == 0) return;
foreach (var menu in listAdminMenu)
{
var tNode = new TreeNode(menu.Text, menu.ID.ToString());
nodes.Add(tNode);
LoadTree(tNode.ChildNodes, menu.ID);
}
}
其中CurrentStationMenus假定是缓存到内存里的菜单集合(即你所说的list)

下面这句调用即实现绑定:
TreeViewMenu.Nodes.Clear();
LoadTree(TreeViewMenu.Nodes, 0);

如果要实现你说的任意一个list传进来都绑定,那么你就需要自己定义一个通用的类型用来放到list里了。把你需要绑定到该树的对象转换成你这个通用的类型,比如定义一个叫TreeNodeData的类型,给它几个必要的属性:
public class TreeNodeData
{
public int ID{get;set;}
public int ParentID{get;set;}
public string Value{get;set;}
public string Text{get;set;}
}
更多追问追答
追问
我现在的情况是有的树节点的父节点不存在,你这种方法会把这些没爸的孩子的都过滤掉
追答
这要看你想怎么样了,如果你想没爹啊孩子都放到根下面,就把没爹的孩子的ParentID都设为0嘛。总之一个原则,你要把所有的东西放到树上去,总得告诉这棵树,哪个是父,哪个是子。这是由树的基本特性确定的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式