2010-07-06 70 views
1

我想解决如何构建树视图,其中子节点基于单个数据库表,其中行可以链接到其他行表明父母/孩子的关系。基于带有父/子链接的单个数据库表的树视图添加子节点

例如,假设表:

 
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

好问题,很难回答。我不得不这样做一会儿,会看看我是否可以使它更通用以提供答案。 – leppie 2010-07-06 04:41:05

回答

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); 
    } 
} 

我还没有测试伪代码,但它应该会告诉你一种将展平数据放入分层结构的方法。你应该能够将它重构为一个更清晰的结构,但这取决于你的代码库。

+0

谢谢!我现在就做。 – 2010-07-06 08:08:29

相关问题