ソースを参照

fix FormView.PageCount after data binding

svn path=/trunk/mcs/; revision=59837
Konstantin Triger 19 年 前
コミット
42ad8b2c02

+ 4 - 0
mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog

@@ -1,3 +1,7 @@
+2006-04-25 Konstantin Triger <[email protected]>
+
+	* FormView.cs: fix FormView.PageCount after data binding.
+
 2006-04-24 Gonzalo Paniagua Javier <[email protected]>
 
 	* CheckBox.cs: certain attributes have to be rendered in the input tag,

+ 7 - 6
mcs/class/System.Web/System.Web.UI.WebControls/FormView.cs

@@ -85,7 +85,6 @@ namespace System.Web.UI.WebControls
 		
 		DataKey key;
 		DataKey oldEditValues;
-		int dataSourceCount;
 		
 		private static readonly object PageIndexChangedEvent = new object();
 		private static readonly object PageIndexChangingEvent = new object();
@@ -655,6 +654,8 @@ namespace System.Web.UI.WebControls
 				return pageIndex;
 			}
 			set {
+				if (pageIndex == value)
+					return;
 				pageIndex = value;
 				RequireBinding ();
 			}
@@ -786,8 +787,8 @@ namespace System.Web.UI.WebControls
 		void RequireBinding ()
 		{
 			if (Initialized) {
-				RequiresDataBinding = true;
 				pageCount = -1;
+				RequiresDataBinding = true;
 			}
 		}
 		
@@ -837,8 +838,8 @@ namespace System.Web.UI.WebControls
 				}
 			}
 
-			pageCount = dataSource.Count;
-			bool showPager = AllowPaging && (PageCount > 1);
+			pageCount = dataSource.DataSourceCount;
+			bool showPager = AllowPaging && (dataSource.Count > 1);
 			
 			Controls.Clear ();
 			table = CreateTable ();
@@ -875,7 +876,7 @@ namespace System.Web.UI.WebControls
 				table.Rows.Add (topPagerRow);
 			}
 
-			if (dataSourceCount > 0) {
+			if (pageCount > 0) {
 				DataControlRowState rstate = GetRowState ();
 				itemRow = CreateRow (0, DataControlRowType.DataRow, rstate);
 				InitializeRow (itemRow);
@@ -1035,7 +1036,7 @@ namespace System.Web.UI.WebControls
 			cachedKeyProperties = null;
 			base.DataBind ();
 			
-			if (dataSourceCount > 0) {
+			if (pageCount > 0) {
 				if (CurrentMode == FormViewMode.Edit)
 					oldEditValues = new DataKey (GetRowValues (true));
 				key = new DataKey (CreateRowDataKey (dataItem), DataKeyNames);

+ 4 - 0
mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog

@@ -1,3 +1,7 @@
+2006-04-25	Konstantin Triger <[email protected]>
+
+	* FormViewTest.cs: added test for PageCount.
+
 2006-04-20	Konstantin Triger <[email protected]>
 
 	* FormViewTest.cs: added test for PageIndex.

+ 20 - 0
mcs/class/System.Web/Test/System.Web.UI.WebControls/FormViewTest.cs

@@ -140,6 +140,26 @@ namespace MonoTests.System.Web.UI.WebControls
 			f.PageIndex = 1;
 			Assert.IsTrue (cur != f.DataItem, "#01");
 		}
+		
+		[Test]
+		public void PageCount ()
+		{
+			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);
+			f.PageIndex = 1;
+			Assert.AreEqual (16, f.PageCount, "#01");
+		}
 	}
 }
 #endif