get {
return pageCount;
}
+ private set {
+ pageCount = value;
+ }
}
[WebCategoryAttribute ("Paging")]
protected virtual FormViewRow CreateRow (int rowIndex, DataControlRowType rowType, DataControlRowState rowState)
{
FormViewRow row = new FormViewRow (rowIndex, rowType, rowState);
- OnItemCreated (EventArgs.Empty);
return row;
}
if (RequiresDataBinding) {
OnDataBinding (EventArgs.Empty);
RequiresDataBinding = false;
- PerformDataBinding (new object [] { null });
+ PerformDataBinding (null);
MarkAsDataBound ();
OnDataBound (EventArgs.Empty);
}
protected override int CreateChildControls (IEnumerable data, bool dataBinding)
{
PagedDataSource dataSource = new PagedDataSource ();
- dataSource.DataSource = data;
+ dataSource.DataSource = CurrentMode != FormViewMode.Insert ? data : null;
dataSource.AllowPaging = AllowPaging;
dataSource.PageSize = 1;
dataSource.CurrentPageIndex = PageIndex;
}
}
- pageCount = dataSource.DataSourceCount;
- bool showPager = AllowPaging && (pageCount > 1);
+ bool showPager = AllowPaging && (dataSource.PageCount > 1);
Controls.Clear ();
table = CreateTable ();
Controls.Add (table);
+ headerRow = null;
+ footerRow = null;
+ topPagerRow = null;
+ bottomPagerRow = null;
// Gets the current data item
-
- IEnumerator e = dataSource.GetEnumerator ();
- dataItem = null;
if (AllowPaging) {
- if (e.MoveNext ())
- dataItem = e.Current;
+ PageCount = dataSource.DataSourceCount;
+ if (PageIndex >= PageCount && PageCount > 0) {
+ pageIndex = dataSource.CurrentPageIndex = PageCount - 1;
+ }
+ if (dataSource.DataSource != null) {
+ IEnumerator e = dataSource.GetEnumerator ();
+ if (e.MoveNext ())
+ dataItem = e.Current;
+ }
}
- else
- for (int page = 0; e.MoveNext (); page++ )
- if (page == PageIndex)
- dataItem = e.Current;
-
+ else {
+ int page = 0;
+ object lastItem = null;
+ if (dataSource.DataSource != null) {
+ IEnumerator e = dataSource.GetEnumerator ();
+ for (; e.MoveNext (); page++) {
+ lastItem = e.Current;
+ if (page == PageIndex)
+ dataItem = e.Current;
+ }
+ }
+ PageCount = page;
+ if (PageIndex >= PageCount && PageCount > 0) {
+ pageIndex = PageCount - 1;
+ dataItem = lastItem;
+ }
+ }
+
// Main table creation
if (HeaderText.Length != 0 || headerTemplate != null) {
table.Rows.Add (topPagerRow);
}
- if (pageCount > 0) {
+ if (PageCount > 0) {
DataControlRowState rstate = GetRowState ();
itemRow = CreateRow (0, DataControlRowType.DataRow, rstate);
InitializeRow (itemRow);
if (dataBinding)
DataBind (false);
- return dataSource.DataSourceCount;
+ OnItemCreated (EventArgs.Empty);
+
+ return PageCount;
}
DataControlRowState GetRowState ()
Assert.AreEqual (7, fv.DoCreateChildControls (myds, false), "CreateChildControlFromViewState");
myds.Remove ("item7");
- }
+ }\r
+\r
+ class MyEnumSource : IEnumerable\r
+ {\r
+ int _count;\r
+\r
+ public MyEnumSource (int count) {\r
+ _count = count;\r
+ }\r
+\r
+ #region IEnumerable Members\r
+\r
+ public IEnumerator GetEnumerator () {\r
+\r
+ for (int i = 0; i < _count; i++)\r
+ yield return i;\r
+ }\r
+\r
+ #endregion\r
+ }\r
+\r
+ [Test]\r
+ public void FormView_CreateChildControls2 ()\r
+ {\r
+ Poker fv = new Poker ();\r
+ fv.Page = new Page ();\r
+ fv.DataSource = new MyEnumSource (20);\r
+ fv.DataBind ();\r
+ \r
+ Assert.AreEqual (20, fv.PageCount, "CreateChildControls#0");\r
+\r
+ Assert.AreEqual (0, fv.DoCreateChildControls (new MyEnumSource (0), true), "CreateChildControls#1");\r
+ Assert.AreEqual (20, fv.DoCreateChildControls (new MyEnumSource (20), true), "CreateChildControls#2");\r
+\r
+ Assert.AreEqual (0, fv.DoCreateChildControls (new object [0], false), "CreateChildControls#3");\r
+ Assert.AreEqual (5, fv.DoCreateChildControls (new object [5], false), "CreateChildControls#4");\r
+ }\r
[Test]
public void FormView_CreateDataSourceSelectArguments ()