#if NET_2_0
using System.Collections;
+using System.ComponentModel;
namespace System.Web.UI.WebControls
{
- public class HierarchicalDataBoundControl : BaseDataBoundControl
+ [DesignerAttribute ("System.Web.UI.Design.WebControls.HierarchicalDataBoundControlDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
+ public abstract class HierarchicalDataBoundControl : BaseDataBoundControl
{
+ [IDReferencePropertyAttribute (typeof(HierarchicalDataSourceControl))]
+ public override string DataSourceID {
+ get {
+ object o = ViewState ["DataSourceID"];
+ if (o != null)
+ return (string)o;
+
+ return String.Empty;
+ }
+ set {
+ if (Initialized)
+ RequiresDataBinding = true;
+
+ ViewState ["DataSourceID"] = value;
+ }
+ }
+
+ protected virtual HierarchicalDataSourceView GetData (string viewPath)
+ {
+ if (DataSource != null && DataSourceID != "")
+ throw new HttpException ();
+
+ IHierarchicalDataSource ds = GetDataSource ();
+ if (ds != null)
+ return ds.GetHierarchicalView (viewPath);
+ else
+ return null;
+ }
+
+ protected virtual IHierarchicalDataSource GetDataSource ()
+ {
+ if (DataSourceID != "")
+ return NamingContainer.FindControl (DataSourceID) as IHierarchicalDataSource;
+
+ return DataSource as IHierarchicalDataSource;
+ }
+
+ [MonoTODO]
+ protected void MarkAsDataBound ()
+ {
+ throw new NotImplementedException ();
+ }
+
+ protected override void OnDataPropertyChanged ()
+ {
+ RequiresDataBinding = true;
+ }
+
+ protected virtual void OnDataSourceChanged (object sender, EventArgs e)
+ {
+ RequiresDataBinding = true;
+ }
+
+ protected internal override void OnLoad (EventArgs e)
+ {
+ if (IsBoundUsingDataSourceID && (!Page.IsPostBack || !EnableViewState))
+ RequiresDataBinding = true;
+
+ IHierarchicalDataSource ds = GetDataSource ();
+ if (ds != null && DataSourceID != "")
+ ds.DataSourceChanged += new EventHandler (OnDataSourceChanged);
+
+ base.OnLoad(e);
+ }
+
+ [MonoTODO]
+ protected override void OnPagePreLoad (object sender, EventArgs e)
+ {
+ base.OnPagePreLoad (sender, e);
+ }
+
+ protected internal virtual void PerformDataBinding ()
+ {
+ }
+
+ protected override void PerformSelect ()
+ {
+ OnDataBinding (EventArgs.Empty);
+ PerformDataBinding ();
+ OnDataBound (EventArgs.Empty);
+ }
+
+ protected override void ValidateDataSource (object dataSource)
+ {
+ if (dataSource is IHierarchicalDataSource || dataSource is IHierarchicalEnumerable)
+ return;
+ throw new InvalidOperationException ("Invalid data source");
+ }
}
}
#endif