我想解决如何构建树视图,其中子节点基于单个数据库表,其中行可以链接到其他行表明父母/孩子的关系。基于带有父/子链接的单个数据库表的树视图添加子节点
例如,假设表:
ID ID_parent Ten 1 null a 2 1 b 3 1 c 4 null d 5 4 e 6 4 f
我要表明如下:
a b c d e f
我想解决如何构建树视图,其中子节点基于单个数据库表,其中行可以链接到其他行表明父母/孩子的关系。基于带有父/子链接的单个数据库表的树视图添加子节点
例如,假设表:
ID ID_parent Ten 1 null a 2 1 b 3 1 c 4 null d 5 4 e 6 4 f
我要表明如下:
a b c d e f
不知道你的数据检索技术,或者你是如何将数据绑定到您的组件我会尽可能通用。
您需要做的第一件事就是从数据库中获取数据。有一些方法可以在SQL Server中按层次进行,但本着通用的精神,我们假设您将以平面结构形式出现。重要的是你的数据是通过它的父母id来排序的,你可以在sql或者代码中做到这一点。
假设您现在有一组有序的数据,我们可以填充我们的节点对象。一个例子是:
public class Node : ICollection<Node>
{
private List<Node> childNodes;
public Node()
{
childNodes = new List<Node>();
}
public Node this[int index]
{
get { return childNodes[index]; }
set { childNodes[index] = value; }
}
public void Add(Node childNode)
{
childNodes.Add(childNode);
}
/* Rest of ICollection<T> implementation */
}
现在填充结构,你需要遍历原始数据。
public Node PopulateTree(TreeData[] treeData)
{
Dictionary<{IdType}, Node> flattenedTree = new Dictionary<{IdType}, Node>();
foreach(TreeData data in treeData)
{
Node node = new Node();
if (data.ParentId != {EmptyId})
{
Node parentNode = flattenedTree[data.ParentId];
parentNode.Add(node);
}
flattenedTree.Add(data.Id, node);
}
}
我还没有测试伪代码,但它应该会告诉你一种将展平数据放入分层结构的方法。你应该能够将它重构为一个更清晰的结构,但这取决于你的代码库。
谢谢!我现在就做。 – 2010-07-06 08:08:29
好问题,很难回答。我不得不这样做一会儿,会看看我是否可以使它更通用以提供答案。 – leppie 2010-07-06 04:41:05