public abstract class HierarchicalDataBoundControl : BaseDataBoundControl
{
protected virtual HierarchicalDataSourceView GetData(string viewPath);
protected virtual IHierarchicalDataSource GetDataSource();
protected override void PerformSelect();
protected internal virtual void PerformDataBinding(); 
protected
}
protected override void ValidateDataSource(object dataSource)
{
if (((dataSource != null) && !(dataSource is IHierarchicalEnumerable)) && !(dataSource is IHierarchicalDataSource))
{
throw new InvalidOperationException());
}
}
public interface IHierarchicalDataSource
{
event EventHandler DataSourceChanged;
HierarchicalDataSourceView GetHierarchicalView(string viewPath);
}
public interface IHierarchicalEnumerable : IEnumerable
{
IHierarchyData GetHierarchyData(object enumeratedItem);
}
public interface IHierarchyData
{
IHierarchicalEnumerable GetChildren();
IHierarchyData GetParent();
bool HasChildren { get; }
object Item { get; }
string Path { get; }
string Type { get; }
}
protected override void OnPagePreLoad(object sender, EventArgs e)
{
base.OnPagePreLoad(sender, e);
if (this.Page != null)
{
if (!this.Page.IsPostBack)
{
base.RequiresDataBinding = true;
}
else if (base.IsViewStateEnabled && (this.ViewState["_!DataBound"] == null))
{
base.RequiresDataBinding = true;
}
}
this._pagePreLoadFired = true;
}
protected internal override void OnLoad(EventArgs e)
{
base.ConfirmInitState();
this.ConnectToHierarchicalDataSource();
if (((this.Page != null) && !this._pagePreLoadFired) && (this.ViewState["_!DataBound"] == null))
{
if (!this.Page.IsPostBack)
{
base.RequiresDataBinding = true;
}
else if (base.IsViewStateEnabled)
{
base.RequiresDataBinding = true;
}
}
base.OnLoad(e);
}