Asp.NET下拉列表以树的形式从列表中添加列表项

时间:2017-01-15 18:44:22

标签: c# asp.net webforms

我有一个方法,我必须从形成像树的集合中填充dropdownlist。我有父对象列表,每个父对象都可以有子对象列表,每个子对象都可以有列表对象等等。 我必须遍历tha集合,因为我想缩进项目以便构建层次结构。

ddl应如下所示:( - 是缩进符号) 亲  -儿童   --grandchild    --- grandgrandchild  -儿童 亲 ..等等..

我应该如何改变这个方法,所以我在循环内部没有循环,因为我不知道树的depht

提前致谢!

方法:

private void BindObjectDropDown()
    {
        ddlObject.Items.Clear();

        ObjectCollection collection = Object.GetList();

        if (collection != null && collection.Count > 0)
        {
            foreach (var parent in collection)
            {
                ddlObject.Items.Add(new ListItem($"{parent.Title}", parent.Id.ToString()));
                if (parent.Objects != null && parent.Objects.Count > 0)
                {
                    foreach (var child in parent.Objects)
                    {
                        ddlObject.Items.Add(new ListItem($"{_ddlIndent}{child.Title}", child.Id.ToString()));

                        if (child.Objects != null && child.Objects.Count > 0)
                        {
                            foreach (var grandchild in child.Objects)
                            {
                                ddlObject.Items.Add(new ListItem($"{_ddlIndent}{_ddlIndent}{grandchild.Title}", grandchild.Id.ToString()));

                                //and so on and so on ....

                            }
                        }

                    }
                }
            }
            foreach (ListItem item in ddlObject.Items)
            {
                item.Text = HttpUtility.HtmlDecode(item.Text);
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

如果有人想要一个解决方案,递归,当然:

private void BindMyObjectDropDown()
    {
        ddlMyObject.Items.Clear();

        MyObjectCollection collection = MyObject.GetList(0, true);

        if (collection != null && collection.Count > 0)
        {
            AddDdlItems(collection, 0);

            foreach (ListItem item in ddlMyObject.Items)
            {
                item.Text = HttpUtility.HtmlDecode(item.Text);
            }
        }
        ddlMyObject.Items.Insert(0, new ListItem(EntityResource.DefaultDropDownPick, "0"));
    }

    private void AddDdlItems(MyObjectCollection collection, int depth)
    {
        string indent = string.Empty;
        for (int i = 0; i < depth; i++)
        {
            indent += _ddlIndent;
        }

        foreach (var myObject in collection)
        {
            ddlMyObject.Items.Add(new ListItem($"{indent}{myObject.Title}", myObject.Id.ToString()));

            if (myObject.Objects!= null && myObject.Objects.Count > 0)
            {
                AddDdlItems(myObject.Objects, depth + 1);
            }
        }
    }