0

我有一张如下表

ID   Name   Parent
1     A       0
2     B       1
3     c       1
4     D       2
5     E       2
6     F       0
..    ..      ..

我需要的是展示它

 - A
    -B
     - D
     - E 
    -C

 - F

我正在datatables用 c#制作

我正在使用jquery-ajaxa 获取数据并准备 html web method,但我不想使用任何插件来制作树视图。

选择 dtParent 中的记录,其中 Parent = 0

在此之后,我试图过滤子条目的记录。

我相信这可以通过递归轻松完成,但我无法找到正确的逻辑。

我尝试过的代码(dtGoals 是我拥有所有记录的表格,在 dtData 中我只得到父母)

dtData = dtGoals;
dtData.DefaultView.RowFilter = "ID = " + dtGoals.Rows[goalCount]["GoalId"].ToString();
dtData.AcceptChanges();
dtData = dtData.DefaultView.ToTable();

在 RowFilter 父记录位于dtData. 制作具有第一条记录(ID = 1)的树节点。现在我不知道如何进行。

任何帮助将不胜感激。

提前致谢。

4

2 回答 2

1
public class Item
{
    public Item()
    {
        Children = new List<Item>();
    }

    public int Id { get; set; } 
    public string Name { get; set; } 
    public int ParentId { get; set; }
    public List<Item> Children { get; set; } 
}

public class TreeBuilder
{
    public TreeBuilder(IEnumerable<Item> items)
    {
        _items = new HashSet<Item>(items);
        TreeRootItems = new List<Item>();
        TreeRootItems.AddRange(_items.Where(x => x.ParentId == 0));
        BuildTree(TreeRootItems);
    }

    private readonly HashSet<Item> _items;
    public List<Item> TreeRootItems { get; private set; }


    public void BuildTree(List<Item> result)
    {
        foreach (var item in result)
        {
            item.Children.AddRange(_items.Where(x => x.ParentId == item.Id));
            BuildTree(item.Children);
        }
    }
}
于 2013-10-15T11:34:25.867 回答
0

一个 jQuery 解决方案:

http://jsfiddle.net/Pascalz/HqDBX/

HTML:

<div id="0">
</div>

Javascript:

var datas = [
    {ID:1,Name:"A",Parent:0},
    {ID:2,Name:"B",Parent:1},
    {ID:3,Name:"C",Parent:1},
    {ID:4,Name:"D",Parent:2},
    {ID:5,Name:"E",Parent:2},
    {ID:6,Name:"F",Parent:0}
];

$.each(datas, function (index, item) {
   $('#' + String(item.Parent)).append($('<div class=\'t\' id=\'' + item.ID + '\'>' + item.Name + '</div>'));
});

CSS:

div {
    margin-left: 10px;
}
div.t:before{content: "- "}
于 2013-10-15T11:48:01.373 回答