C# - 根据选定的子类别

时间:2017-09-13 17:21:04

标签: c# parent-child

我有以下有父母子女关系的课程。一个类别可以有N个孩子,每个孩子可以有N个孩子,依此类推。

public class Category
{
    public string Id { get; set; }
    public string Name { get; set; }
    public List<Category> Children { get; set; }
}

我使用下面的代码填充了treeview。

        Category cat1 = new Category ;
        cat1.Id = "1";
        cat1.Name = "test1";
        this.ecrCategories.Add(cat1);

        Category cat2 = new Category ;
        cat2.Id = "2";
        cat2.Name = "test2";
        this.ecrCategories.Add(cat2);

        Category cat3 = new Category ;
        cat3.Id = "3";
        cat3.Name = "test3";
        this.ecrCategories.Add(cat3);

        Category child2 = new Category ;
        child2.Id = "6";
        child2.Name = "child2";

        Category child1 = new Category ;
        child1.Children = new List<Category>();
        child1.Id = "4";
        child1.Name = "child1";
        child1.Children.Add(child2);

        Category cat4 = new Category ;
        cat4.Children = new List<Category>();
        cat4.Id = "5";
        cat4.Name = "test5";
        cat4.Children.Add(child1);
        this.ecrCategories.Add(cat4);   

要求是找到所有选择任何类别的父母。让我们假设child3类别位于test-&gt; test1-&gt; child2-&gt; child3。当点击child3时,我应该能够识别test,test1,child2类别。需要查找所选的任何子类别的所有父类别。请帮助实现同样的目标。

1 个答案:

答案 0 :(得分:0)

首先,在提供的示例中语法不正确。

要回答您的问题,您可以使用recursive功能执行此操作。这是一个如何做的虚拟示例:

我在这里选择child2

{
   //this is the main method.

   //Assuming 'ecrCategories' is list of Categories
   getparent(child2, ecrCategories);
   Console.WriteLine(str.Trim(','));
}

static string str = "";

static void getparent(Category cat, List<Category> listtocheck )
{
    foreach (var item in listtocheck)
    {
        if (item.Children == null) continue;
        if (item.Children.Count>0  )
        {
            str += item.Name + ",";
            getparent(item, item.Children);
        }
    }
}

输出:

test5,child1

Fiddle

上查看