refactoring
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / HierarchicalDataBoundControl.cs
index 7fc986be0ef3af9da66286e2f349ba3ea0b3b29d..5cef14971ef66de2436f039197aed05d45e41b28 100644 (file)
 
 #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