从递归列表C#Asp.net创建树视图

时间:2015-06-02 09:43:25

标签: c# asp.net list treeview

我想从递归列表中填充树视图, 我有一个项目,其中还包含项目列表等。 父节点的子节点数量和级别不受限制。

这是班级:

public class item
        {
            public int Id;
            public string texte;
            public List<item> listeItems;
            public string status;
            public item()
            {
                this.listeItems = new List<item>();
            }
        }

例如:

item1 --> item11
      |-> item12
      |-> item13

item2 --> item21
      |-> item22
      |-> item23 --> item 211
                 |-> item 212 --> item 2111
                              |->........

我怎么能这样做? 提前谢谢!!

3 个答案:

答案 0 :(得分:0)

你需要写一些类似的东西:

void Populate(item i)
{
    if (i == null)
      return;
     foreach (var child in i)
     {
        Populate(child);
     }
     i.Id = something;
     i.texte = something;
     i.status = something;
}

答案 1 :(得分:0)

由于子节点的数量不受限制,更好的方法是使用字典(尽管它可能比列表慢)。下面的实现是一种键值对数据结构,其中每个项目都是&#34;键&#34;它的父母是一个&#34;值&#34;。希望能帮助到你。

using System.Collections; 

使用System.Collections.Generic;

类mytree     {

        public static Dictionary<String, String> dict = new Dictionary<String, String>();

         public void dictionaryadd(String key, String value) 
    {
      dict.Add(key, value);
      }
      static List<int> GetKeysFromValue(Dictionary<string, string> dict, string value)
{
    // Use LINQ to do a reverse dictionary lookup.
    // Returns a 'List<T>' to account for the possibility
    // of duplicate values.
    return
        (from item in dict
         where item.Value.Equals(value)
         select item.Key).ToList();
}
       public String dictionaryout(String key)
    {
        string value;
        if(dict.TryGetValue(key,out value))
                return value; 
        else    return String.Empty;
     }

     }

答案 2 :(得分:0)

public HtmlGenericControl RenderMenu(List<item> nodes)
{
    if (nodes == null)
        return null;

    var ul = new HtmlGenericControl("ul");

    foreach (Node node in nodes)
    {
        var li = new HtmlGenericControl("li");
        li.InnerText = node.texte;

        if(node.listeItems != null)
        {
            li.Controls.Add(RenderMenu(node.listeItems));
        }

        ul.Controls.Add(li);
    }

    return ul;
}