Отображение иерархических данных во вложенных повторителях

У меня есть объект в моей базе данных, который выглядит так:

Item
{
    ID,
    Text,
    Description,
    ...
    ParentID
}

Где ParentID ссылается на другой Item.ID;

Я хочу перечислить эти элементы иерархически, используя ASP.net. Я предполагаю, что хочу использовать повторитель asp: для вложения, но, возможно, нет. Если есть лучший вариант, то я только за. Меня особенно интересуют 3+ уровня вложенности.

Я использую linq С# 4.0, если это имеет значение.


person Rick    schedule 26.08.2010    source источник


Ответы (2)


TreeView может быть хорошим выбором для отображения иерархических данных. Вы можете найти множество примеров связывания дерева с сущностями linq. Однако повторитель все еще остается выбором.

Приведенная ниже статья будет полезна для XML, LINQ и TreeView http://www.4guysfromrolla.com/articles/042308-1.aspx

Есть также способы сделать это без данных XML.

Вы по-прежнему можете использовать повторитель, например:

<asp:Repeater ID="rpParent" runat="server" OnItemDataBound="rpParent_ItemDataBound">
    <ItemTemplate>
        <%# Eval("Name") %>
        <asp:Repeater ID="rpChild" runat="server">
            <ItemTemplate>
                <%# Eval("Name") %>
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

Код позади:

public partial Page{
    protected void rpParent_ItemDataBound(object sender, RepeaterEventArgs e){
        Item ParentItem = e.Item.DataItem as Item;
        Repeater rpChild = e.Item.FindControl("rpChild") as Repeater;
        rpChild.DataSource = context.SelectChildObjectsByParentId(ParentItem.Id);
        rpChild.DataBind();
    }
}
person Musa Hafalır    schedule 26.08.2010

Вот довольно полезный метод расширения для того, что вы пытаетесь сделать. Это позволит вам легко привязываться к иерархии и отображать ее в виде дерева (или повторителя, если вы тоже хотите это сделать):

http://www.scip.be/index.php?Page=ArticlesNET18#AsHierarchy

http://www.scip.be/index.php?Page=ArticlesNET23

person Ocelot20    schedule 27.08.2010