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

Create a treeview from a recursiv list C# Asp.net

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

这里是 class:

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
                              |->........

我该怎么做? 提前谢谢你!!

你需要这样写:

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

由于子节点的数量没有限制,更好的方法是使用字典(虽然它可能比列表慢)。下面的实现是一种键值对数据结构,其中每个项目都是 "key",其父项是 "value"。希望能帮助到你。

using System.Collections; 

使用System.Collections.Generic;

class 我的树 {

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

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