Рекурсивное отображение вложенных объектов в asp.net - PullRequest
1 голос
/ 15 июля 2011

Мой проект имеет некоторый «MyObject», а MyObject имеет свойство List<MyObject>.Я хотел бы создать простой неупорядоченный список HTML, чтобы отобразить иерархию для любого указанного MyObject.Несколько проблем:

1) Число детей общей глубиной неизвестно.

2) Я хотел бы иметь возможность ограничить глубину до X детей.

3) Элементы списка должны содержать любые допустимые элементы управления HTML и, желательно, asp.net, например LinkButton

Каков наилучший способ справиться с этим?TreeViews?Вложенные ListViews?Пример кода или ссылка на учебник будет высоко ценится.

Ответы [ 2 ]

2 голосов
/ 16 июля 2011

Ваша третья проблема все еще неясна, но следующее должно помочь вам.Он использует рекурсивную функцию для чтения объекта и его потомков.В этом примере свойства добавляются в простой маркированный список, но его можно легко изменить в других ситуациях.

    public class MyObject
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public List<MyObject> Children { get; set; }
    }

    public void BuildTree(MyObject obj)
    {
        lit.Text += "<ul>";
        lit.Text += "<li>" + obj.Name + "- Age: " + obj.Age + "</li>";
        if (obj.Children != null)
        {
            foreach (MyObject objChild in obj.Children)
            {
                BuildTree(objChild);
            }
        }
        lit.Text += "</ul>";
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        MyObject child1 = new MyObject { Name = "Joe", Age = 7 };
        MyObject child2 = new MyObject { Name = "Sally", Age = 6 };
        List<MyObject> children = new List<MyObject>();
        children.Add(child1);
        children.Add(child2);
        MyObject parent1 = new MyObject { Name = "Roger", Age = 36, Children = children };
        BuildTree(parent1);
    }
1 голос
/ 16 июля 2011

Вы можете использовать TreeView вот так

public static int maxDepth = 5;
public class MyObject
{
    public string Text;
    public string Value;
    public List<MyObject> Children;

    public MyObject(string text, string value)
    {
        Text = text;
        Value = value;
        Children = new List<MyObject>();
    }
    public MyObject(string text)
    {
        Text = text;
        Value = text;
        Children = new List<MyObject>();
    }
    public void AddToNode(TreeNode node, int depth)
    {
        TreeNode subNode = new TreeNode(Text, Value);
        node.ChildNodes.Add(subNode);
        if (depth < maxDepth)
        {
            for (int i = 0; i < Children.Count; i++)
            {
                Children[i].AddToNode(subNode, depth + 1);
            }
        }
    }
}
protected void Page_Load(object sender, EventArgs e)
{
    MyObject myObject;

    myObject = new MyObject("obj 1");
    myObject.Children.Add(new MyObject("obj 1.1"));
    myObject.Children.Add(new MyObject("obj 1.2"));
    myObject.Children[0].Children.Add(new MyObject("obj 1.1.1"));
    myObject.Children[0].Children.Add(new MyObject("obj 1.1.2"));
    myObject.Children[1].Children.Add(new MyObject("obj 1.2.1"));
    myObject.Children[1].Children.Add(new MyObject("obj 1.2.2"));

    treeView.Nodes.Add(new TreeNode("Root", "root"));
    myObject.AddToNode(treeView.Nodes[0], 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...