我有一个方法,我必须从形成像树的集合中填充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);
}
}
}
答案 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);
}
}
}