User863160722 posted
The simplest option is a recursive PerformDataBinding method. Something like this should work:
public class HierarchicalBulletedList : HierarchicalDataBoundControl
{
protected override void CreateChildControls()
{
if (null != Page && Page.IsPostBack && null != ViewState["_!DataBound"])
{
this.RequiresDataBinding = true;
this.EnsureDataBound();
}
}
protected override void PerformDataBinding()
{
IHierarchicalEnumerable dataSource = GetData(string.Empty).Select();
this.PerformDataBinding(0, this.Controls, dataSource);
this.MarkAsDataBound();
}
protected virtual void PerformDataBinding(int level, ControlCollection controls, IHierarchicalEnumerable dataSource)
{
if (null != dataSource)
{
controls.Clear();
foreach (object value in dataSource)
{
Control item = CreateAndBindControl(level, value);
controls.Add(item);
data = dataSource.GetHierarchyData(value);
if (null != data && data.HasChildren)
{
IHierarchicalEnumerable childData = data.GetChildren();
PerformDataBinding(1 + level, item.Controls, childData);
}
}
}
}
protected virtual Control CreateAndBindControl(int level, object dataItem)
{
// Create and bind the child control here...
}
}