我正在尝试构建一个树视图,其中子节点基于单个数据库表,其中行可以链接到指示父/子关系的其他行。
例如,给出表格:
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
答案 0 :(得分:1)
在不知道您的数据检索技术或如何将数据绑定到您的组件的情况下,我将尽可能通用。
您需要做的第一件事就是从数据库中获取数据。有一些方法可以在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);
}
}
我没有测试过伪代码,但它应该向您展示一种将扁平化数据转换为分层结构的方法。您应该能够将其重构为更清晰的结构,但具体取决于您的代码库。