C# 列表中的asp.net树结构
我有“人”类型的对象。 每个这样的对象都有一个名为ManagerID的属性 在我的数据库中,数据如下所示:C# 列表中的asp.net树结构,c#,asp.net,treeview,C#,Asp.net,Treeview,我有“人”类型的对象。 每个这样的对象都有一个名为ManagerID的属性 在我的数据库中,数据如下所示: John Lee David William Ernest Johan Red George Gabriel Albert Don Gabi Marry Helen ......etc Id,Name,ManagerId 我需要用数据库数据在asp.net上建立一个树。该树应如下所示: John Le
John
Lee
David
William
Ernest
Johan
Red
George
Gabriel
Albert
Don
Gabi
Marry
Helen
......etc
Id,Name,ManagerId
我需要用数据库数据在asp.net上建立一个树。该树应如下所示:
John
Lee
David
William
Ernest
Johan
Red
George
Gabriel
Albert
Don
Gabi
Marry
Helen
......etc
人员应出现在经理下方的树上,每个子级别增加增量
现在,我将这些人加载到一个列表中:
List<People> lst = loadPeople();
List lst=loadPeople();
如何转换树中的列表?
谢谢。以下链接
这个不错。
您可以按ManagerID对列表进行排序,假设没有经理的人的ManagerID=0,因为首先添加“顶级”经理很重要,然后开始从顶部添加并搜索父级,如果没有父级,则此人是“顶级”经理,没有经理,并将其添加到树视图的根目录中 大概是这样的:
protected void Page_Load(object sender, EventArgs e)
{
List<People> pplList = LoadPeople();
foreach (People person in pplList.OrderBy(pp => pp.ManagerID))
{
IEnumerable<TreeNode> nodes = Extensions.GetItems<TreeNode>(TreeViewPeople.Nodes, item => item.ChildNodes);
TreeNode parent = nodes.FirstOrDefault(nn => nn.Value.Equals(person.ManagerID.ToString()));
TreeNode newNode = new TreeNode(person.Name, person.ID.ToString());
if (parent == null)
TreeViewPeople.Nodes.Add(newNode);
else
parent.ChildNodes.Add(newNode);
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
List pplList=LoadPeople();
foreach(pplList.OrderBy(pp=>pp.ManagerID)中的人)
{
IEnumerable节点=Extensions.GetItems(TreeViewPeople.nodes,item=>item.ChildNodes);
TreeNode parent=nodes.FirstOrDefault(nn=>nn.Value.Equals(person.ManagerID.ToString());
TreeNode newNode=newtreenode(person.Name,person.ID.ToString());
如果(父项==null)
TreeViewPeople.Nodes.Add(newNode);
其他的
parent.ChildNodes.Add(newNode);
}
}
下面是GetItems方法,它将返回所有树节点,从这里获取:
公共静态类扩展
{
公共静态IEnumerable GetItems(此IEnumerable集合,Func选择器)
{
堆栈=新堆栈();
stack.Push(collection.OfType());
而(stack.Count>0)
{
IEnumerable items=stack.Pop();
foreach(项目中的var项目)
{
收益回报项目;
IEnumerable children=选择器(项).OfType();
堆叠、推送(儿童);
}
}
}
}
loadPeople()中的内容代码>?您是否使用EF或任何其他ORM?如果只使用sql,则可以使用递归查询。loadPeople()是一种构建People类型对象列表的方法。该方法从数据库、web服务中读取数据,并进行一些筛选/验证。关键是我有一个列表:列表,我需要将其呈现为一个树。每个列表可能有一个管理器(并且只有一个)。不是所有的人都是经理,谢谢。工作(几乎)很好。我唯一的问题是treeView1.Nodes没有Find()方法。我使用treeView1.FindNode(字符串id),但是这个方法不使用递归搜索,只搜索第一级。在开始自己编写递归搜索之前,请告诉我应该如何访问该方法?我需要什么参考资料?我使用的是framework 4.0。哦,对不起,这是WinForms树视图,对于ASP.NET,你必须使用递归函数来迭代所有节点,看这里:我更新了我的答案供将来的读者阅读,现在是ASP.NET树视图。我知道这已经有一段时间了,但“TreeViewPeople.nodes”到底是什么?