protected override int CreateChildControls (IEnumerable data, bool dataBinding)
{
PagedDataSource dataSource = new PagedDataSource ();
dataSource.DataSource = CurrentMode != FormViewMode.Insert ? data : null;
dataSource.AllowPaging = AllowPaging;
dataSource.PageSize = 1;
dataSource.CurrentPageIndex = PageIndex;
if (dataBinding && CurrentMode != FormViewMode.Insert) {
DataSourceView view = GetData ();
if (view != null && view.CanPage) {
dataSource.AllowServerPaging = true;
if (SelectArguments.RetrieveTotalRowCount)
dataSource.VirtualCount = SelectArguments.TotalRowCount;
}
}
PagerSettings pagerSettings = PagerSettings;
bool showPager = AllowPaging && pagerSettings.Visible && (dataSource.PageCount > 1);
Controls.Clear ();
table = CreateTable ();
Controls.Add (table);
headerRow = null;
footerRow = null;
topPagerRow = null;
bottomPagerRow = null;
// Gets the current data item
if (AllowPaging) {
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 {
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
bool emptyRow = PageCount == 0 && CurrentMode != FormViewMode.Insert;
if (!emptyRow) {
headerRow = CreateRow (-1, DataControlRowType.Header, DataControlRowState.Normal);
InitializeRow (headerRow);
table.Rows.Add (headerRow);
}
if (showPager && pagerSettings.Position == PagerPosition.Top || pagerSettings.Position == PagerPosition.TopAndBottom) {
topPagerRow = CreateRow (-1, DataControlRowType.Pager, DataControlRowState.Normal);
InitializePager (topPagerRow, dataSource);
table.Rows.Add (topPagerRow);
}
if (PageCount > 0) {
DataControlRowState rstate = GetRowState ();
itemRow = CreateRow (0, DataControlRowType.DataRow, rstate);
InitializeRow (itemRow);
table.Rows.Add (itemRow);
} else {
switch (CurrentMode) {
case FormViewMode.Edit:
itemRow = CreateRow (-1, DataControlRowType.EmptyDataRow, DataControlRowState.Edit);
break;
case FormViewMode.Insert:
itemRow = CreateRow (-1, DataControlRowType.DataRow, DataControlRowState.Insert);
break;
default:
itemRow = CreateRow (-1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
break;
}
InitializeRow (itemRow);
table.Rows.Add (itemRow);
}
if (!emptyRow) {
footerRow = CreateRow (-1, DataControlRowType.Footer, DataControlRowState.Normal);
InitializeRow (footerRow);
table.Rows.Add (footerRow);
}
if (showPager && pagerSettings.Position == PagerPosition.Bottom || pagerSettings.Position == PagerPosition.TopAndBottom) {
bottomPagerRow = CreateRow (0, DataControlRowType.Pager, DataControlRowState.Normal);
InitializePager (bottomPagerRow, dataSource);
table.Rows.Add (bottomPagerRow);
}
OnItemCreated (EventArgs.Empty);
if (dataBinding)
DataBind (false);
return PageCount;
}