ensure rebinding when FormView.PageIndex is called
authorKonstantin Triger <kostat@mono-cvs.ximian.com>
Thu, 20 Apr 2006 09:15:05 +0000 (09:15 -0000)
committerKonstantin Triger <kostat@mono-cvs.ximian.com>
Thu, 20 Apr 2006 09:15:05 +0000 (09:15 -0000)
svn path=/trunk/mcs/; revision=59688

mcs/class/System.Web/System.Web.UI.WebControls/BaseDataBoundControl.cs
mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
mcs/class/System.Web/System.Web.UI.WebControls/FormView.cs
mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
mcs/class/System.Web/Test/System.Web.UI.WebControls/FormViewTest.cs

index 50c9f8faac9c11f2485522d52feb740a242a02c9..71ae65da7c12eb52f434a0e50328b3468fa4c8ca 100644 (file)
@@ -45,6 +45,7 @@ namespace System.Web.UI.WebControls {
                
                object dataSource;
                bool initialized;
+               bool preRendered;
                bool requiresDataBinding;
                
                protected BaseDataBoundControl ()
@@ -97,7 +98,11 @@ namespace System.Web.UI.WebControls {
                
                protected bool RequiresDataBinding {
                        get { return requiresDataBinding; }
-                       set { requiresDataBinding = value; }
+                       set { 
+                               requiresDataBinding = value;
+                               if (value && preRendered && IsBoundUsingDataSourceID && Page != null && !Page.IsCallback)
+                                       EnsureDataBound ();
+                       }
                }
                
                protected void ConfirmInitState ()
@@ -141,6 +146,7 @@ namespace System.Web.UI.WebControls {
                
                protected internal override void OnPreRender (EventArgs e)
                {
+                       preRendered = true;
                        EnsureDataBound ();
                        base.OnPreRender (e);
                }
index 8caf4639c848a5456b6019e125f5a9c2a9264c76..9984fd1d328a9bbfdb9ddcde86210a2ed8fb4110 100644 (file)
@@ -1,3 +1,11 @@
+2006-04-20  Konstantin Triger  <kostat@mainsoft.com>
+
+       * BaseDataBoundControl.cs: RequiresDataBinding rebinds if the control prerendered.
+       * FormView.cs: 
+               enable binding.
+               ensure rebinding when FormView.PageIndex is called.
+               and bind to the correct PageIndex.
+
 2006-04-20  Konstantin Triger  <kostat@mainsoft.com>
 
        * MenuItem.cs: when binding to IHierarchyData, check whether 
index ca5e4db42963e344008532efd591bd1ccd806199..49585b9598ebf6c3cafeeb462b1a24b97b62069c 100644 (file)
@@ -806,55 +806,39 @@ namespace System.Web.UI.WebControls
                [MonoTODO]
                protected override void EnsureDataBound ()
                {
-                       throw new NotImplementedException ();
+                       base.EnsureDataBound ();
                }
        
                [MonoTODO]
                protected override Style CreateControlStyle ()
                {
-                       throw new NotImplementedException ();
+                       return base.CreateControlStyle ();
                }
                
                protected override int CreateChildControls (IEnumerable data, bool dataBinding)
                {
-                       PagedDataSource dataSource;
+                       PagedDataSource dataSource = new PagedDataSource ();
+                       dataSource.DataSource = data;
+                       dataSource.AllowPaging = AllowPaging;
+                       dataSource.PageSize = 1;
+                       dataSource.CurrentPageIndex = PageIndex;
 
                        if (dataBinding) {
                                DataSourceView view = GetData ();
-                               dataSource = new PagedDataSource ();
-                               dataSource.DataSource = data;
-                               
-                               if (AllowPaging) {
-                                       dataSource.AllowPaging = true;
-                                       dataSource.PageSize = 1;
-                                       dataSource.CurrentPageIndex = PageIndex;
-                                       if (view.CanPage) {
-                                               dataSource.AllowServerPaging = true;
-                                               if (view.CanRetrieveTotalRowCount)
-                                                       dataSource.VirtualCount = SelectArguments.TotalRowCount;
-                                               else {
-                                                       dataSource.DataSourceView = view;
-                                                       dataSource.DataSourceSelectArguments = SelectArguments;
-                                                       dataSource.SetItemCountFromPageIndex (PageIndex + PagerSettings.PageButtonCount);
-                                               }
+                               if (view.CanPage) {
+                                       dataSource.AllowServerPaging = true;
+                                       if (view.CanRetrieveTotalRowCount)
+                                               dataSource.VirtualCount = SelectArguments.TotalRowCount;
+                                       else {
+                                               dataSource.DataSourceView = view;
+                                               dataSource.DataSourceSelectArguments = SelectArguments;
+                                               dataSource.SetItemCountFromPageIndex (PageIndex + PagerSettings.PageButtonCount);
                                        }
                                }
-                               
-                               pageCount = dataSource.PageCount;
-                       }
-                       else
-                       {
-                               dataSource = new PagedDataSource ();
-                               dataSource.DataSource = data;
-                               if (AllowPaging) {
-                                       dataSource.AllowPaging = true;
-                                       dataSource.PageSize = 1;
-                                       dataSource.CurrentPageIndex = PageIndex;
-                               }
                        }
 
+                       pageCount = dataSource.Count;
                        bool showPager = AllowPaging && (PageCount > 1);
-                       dataSourceCount = dataSource.Count;
                        
                        Controls.Clear ();
                        table = CreateTable ();
@@ -866,10 +850,16 @@ namespace System.Web.UI.WebControls
                        // Gets the current data item
                        
                        IEnumerator e = dataSource.GetEnumerator (); 
-                       if (e.MoveNext ())
-                               dataItem = e.Current;
+                       dataItem = null;
+
+                       if (AllowPaging) {
+                               if (e.MoveNext ())
+                                       dataItem = e.Current;
+                       }
                        else
-                               dataItem = null;
+                       for (int page = 0; e.MoveNext (); page++ )
+                               if (page == PageIndex)
+                                       dataItem = e.Current;
                        
                        // Main table creation
                        
index 9c9776377c0f64562844f921833c446c2b7ef6b2..8b3da6243484b53bcfa5a99337f02fd2430cea43 100644 (file)
@@ -1,3 +1,7 @@
+2006-04-20     Konstantin Triger <kostat@mainsoft.com>
+
+       * FormViewTest.cs: added test for PageIndex.
+
 2006-04-06     Konstantin Triger <kostat@mainsoft.com>
 
        * DataListTest.cs: added test for DataSourceID.
index 95d670c6f4424846cf5288405fc4561bd78607b5..ff6204b4ce814bb666395b23d93ea7804c67acd4 100644 (file)
@@ -32,6 +32,7 @@
 using NUnit.Framework;
 using System;
 using System.IO;
+using System.Collections;
 using System.Globalization;
 using System.Web;
 using System.Web.UI;
@@ -53,6 +54,16 @@ namespace MonoTests.System.Web.UI.WebControls
                        public void LoadState (object state) {
                                LoadViewState (state);
                        }
+                       
+                       public void DoConfirmInitState ()
+                       {
+                               base.ConfirmInitState ();
+                       }
+       
+                       public void DoOnPreRender (EventArgs e)
+                       {
+                               base.OnPreRender (e);
+                       }
                }
                
                [Test]
@@ -108,6 +119,27 @@ namespace MonoTests.System.Web.UI.WebControls
                        Assert.AreEqual (0, p.DataItemCount, "A38");
                        Assert.AreEqual (0, p.DataItemIndex, "A39");
                }
+               
+               [Test]
+               public void PageIndex ()
+               {
+                       ObjectDataSource ds = new ObjectDataSource ();
+                       ds.ID = "ObjectDataSource1";
+                       ds.TypeName = "System.Guid";
+                       ds.SelectMethod = "ToByteArray";
+                       Page p = new Page ();
+                       Poker f = new Poker ();
+                       f.Page = p;
+                       ds.Page = p;
+                       p.Controls.Add (f);
+                       p.Controls.Add (ds);
+                       f.DataSourceID = "ObjectDataSource1";
+                       f.DoConfirmInitState ();
+                       f.DoOnPreRender (EventArgs.Empty);
+                       object cur = f.DataItem;
+                       f.PageIndex = 1;
+                       Assert.IsTrue (cur != f.DataItem, "#01");
+               }
        }
 }
 #endif