Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / MIT / System / Web / UI / MobileControls / PagedControl.cs / 1305376 / PagedControl.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Collections; using System.ComponentModel; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Diagnostics; using System.Security.Permissions; namespace System.Web.UI.MobileControls { /* * Paged control. Abstract control class inherited by all classes * that are internally paginated. * * Copyright (c) 2000 Microsoft Corporation */ ///[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public abstract class PagedControl : MobileControl { private static readonly Object EventLoadItems = new Object(); private const String _itemCountViewStateKey = "_!PagedControlItemCount"; private bool _pagingCharacteristicsChanged = false; int _lastItemIndexLoaded = -1; int _lastItemCountLoaded = -1; Pair _stateLoadItemsArgs = null; /// [ MobileCategory(SR.Category_Action), MobileSysDescription(SR.PagedControl_OnLoadItems) ] public event LoadItemsEventHandler LoadItems { add { Events.AddHandler(EventLoadItems, value); } remove { Events.RemoveHandler(EventLoadItems, value); } } private void OnLoadItems() { int index, count; if (_itemPager != null) { index = PagerItemIndex; count = PagerItemCount; } else { index = 0; count = ItemCount; } OnLoadItems(new LoadItemsEventArgs(index, count)); } /// protected virtual void OnLoadItems(LoadItemsEventArgs e) { if (LoadItemsHandler != null) { _lastItemIndexLoaded = e.ItemIndex; _lastItemCountLoaded = e.ItemCount; LoadItemsHandler(this, e); } } private bool IsCustomPaging { get { return ItemCount > 0; } } private LoadItemsEventHandler LoadItemsHandler { get { return (LoadItemsEventHandler)Events[EventLoadItems]; } } /// protected abstract int InternalItemCount { get; } /// [ Bindable(true), DefaultValue(0), MobileCategory(SR.Category_Paging), MobileSysDescription(SR.PagedControl_ItemCount) ] public int ItemCount { get { Object count = ViewState[_itemCountViewStateKey]; return count == null ? 0 : (int) count; } set { if (value < 0) { throw new ArgumentOutOfRangeException("ItemCount", SR.GetString(SR.PagedControl_ItemCountCantBeNegative, value)); } bool changed = (ItemCount != value); ViewState[_itemCountViewStateKey] = value; if (changed) { InternalItemCountChangedHandler(value); } ConditionalLoadItemsFromPersistedArgs(); } } // Allows special handling of set_ItemCount in derived class, // while maintaining API backward compatibility. internal virtual void InternalItemCountChangedHandler(int newItemCount) {} /// [ Bindable(true), DefaultValue(0), MobileCategory(SR.Category_Paging), MobileSysDescription(SR.PagedControl_ItemsPerPage) ] public int ItemsPerPage { get { object o = ViewState["ItemsPerPage"]; return (o != null) ? (int)o : 0; } set { if (value < 0) { throw new ArgumentOutOfRangeException("ItemsPerPage", SR.GetString(SR.PagedControl_ItemsPerPageCantBeNegative, value)); } ViewState["ItemsPerPage"] = value; } } /// protected virtual int ItemWeight { get { return ControlPager.DefaultWeight; } } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int FirstVisibleItemIndex { get { return (IsCustomPaging || !EnablePagination) ? 0 : PagerItemIndex; } } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int VisibleItemCount { get { return (IsCustomPaging || !EnablePagination) ? InternalItemCount : PagerItemCount; } } /// public override int VisibleWeight { get { // Paged control should count the weight as sum of its items int count = VisibleItemCount; if (count == -1) { return 0; // -1 means control not on the current page } else { return count * GetItemWeight(); } } } private ItemPager _itemPager; /// public override void PaginateRecursive(ControlPager pager) { int itemCount = IsCustomPaging ? ItemCount : InternalItemCount; int itemsPerPage = ItemsPerPage; _itemPager = pager.GetItemPager(this, itemCount, itemsPerPage, GetItemWeight()); } internal int GetItemWeight() { int weight = Adapter.ItemWeight; if (weight == ControlPager.UseDefaultWeight) { weight = ItemWeight; } return weight; } private int PagerItemIndex { get { return (_itemPager == null) ? 0 : _itemPager.ItemIndex; } } private int PagerItemCount { get { return (_itemPager == null) ? InternalItemCount : _itemPager.ItemCount; } } /// protected override void OnPageChange(int oldPageIndex, int newPageIndex) { _pagingCharacteristicsChanged = true; } /// protected override void OnPreRender(EventArgs e) { if (IsCustomPaging && IsVisibleOnPage(Form.CurrentPage) && (!Page.IsPostBack || Form.PaginationStateChanged || _pagingCharacteristicsChanged || !IsViewStateEnabled())) { OnLoadItems(); } base.OnPreRender(e); } internal override void SetControlPage(int page) { // Custom pagination being turned off. _itemPager = null; _pagingCharacteristicsChanged = true; base.SetControlPage(page); } private new bool IsViewStateEnabled() { for (Control ctl = this; ctl != null; ctl = ctl.Parent) { if (!ctl.EnableViewState) { return false; } } return true; } /// protected override Object SavePrivateViewState() { // If the base state is non-null, we always return a Pair with the base state as the // first item. Object baseState = base.SavePrivateViewState(); if (IsCustomPaging && IsTemplated && !IsViewStateEnabled() && _lastItemCountLoaded != -1) { return new Pair(baseState, new Pair(_lastItemIndexLoaded, _lastItemCountLoaded)); } if (baseState != null) { return new Pair(baseState, null); } // baseState is null return null; } /// protected override void LoadPrivateViewState(Object state) { Debug.Assert (state == null || state.GetType() == typeof(Pair), "If the base state is non-null, private viewstate should always be saved as a pair"); Pair statePair = state as Pair; if (statePair != null) { base.LoadPrivateViewState(statePair.First); _stateLoadItemsArgs = statePair.Second as Pair; ConditionalLoadItemsFromPersistedArgs(); } } // Loads items using view state pair in templated case where custom paging // on, view state off. In this special case, load items early as // possible to enable events to be raised. private void ConditionalLoadItemsFromPersistedArgs() { if (_stateLoadItemsArgs != null && IsCustomPaging && IsTemplated && !IsViewStateEnabled()) { OnLoadItems( new LoadItemsEventArgs((int) _stateLoadItemsArgs.First, (int) _stateLoadItemsArgs.Second)); _stateLoadItemsArgs = null; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Collections; using System.ComponentModel; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Diagnostics; using System.Security.Permissions; namespace System.Web.UI.MobileControls { /* * Paged control. Abstract control class inherited by all classes * that are internally paginated. * * Copyright (c) 2000 Microsoft Corporation */ ///[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public abstract class PagedControl : MobileControl { private static readonly Object EventLoadItems = new Object(); private const String _itemCountViewStateKey = "_!PagedControlItemCount"; private bool _pagingCharacteristicsChanged = false; int _lastItemIndexLoaded = -1; int _lastItemCountLoaded = -1; Pair _stateLoadItemsArgs = null; /// [ MobileCategory(SR.Category_Action), MobileSysDescription(SR.PagedControl_OnLoadItems) ] public event LoadItemsEventHandler LoadItems { add { Events.AddHandler(EventLoadItems, value); } remove { Events.RemoveHandler(EventLoadItems, value); } } private void OnLoadItems() { int index, count; if (_itemPager != null) { index = PagerItemIndex; count = PagerItemCount; } else { index = 0; count = ItemCount; } OnLoadItems(new LoadItemsEventArgs(index, count)); } /// protected virtual void OnLoadItems(LoadItemsEventArgs e) { if (LoadItemsHandler != null) { _lastItemIndexLoaded = e.ItemIndex; _lastItemCountLoaded = e.ItemCount; LoadItemsHandler(this, e); } } private bool IsCustomPaging { get { return ItemCount > 0; } } private LoadItemsEventHandler LoadItemsHandler { get { return (LoadItemsEventHandler)Events[EventLoadItems]; } } /// protected abstract int InternalItemCount { get; } /// [ Bindable(true), DefaultValue(0), MobileCategory(SR.Category_Paging), MobileSysDescription(SR.PagedControl_ItemCount) ] public int ItemCount { get { Object count = ViewState[_itemCountViewStateKey]; return count == null ? 0 : (int) count; } set { if (value < 0) { throw new ArgumentOutOfRangeException("ItemCount", SR.GetString(SR.PagedControl_ItemCountCantBeNegative, value)); } bool changed = (ItemCount != value); ViewState[_itemCountViewStateKey] = value; if (changed) { InternalItemCountChangedHandler(value); } ConditionalLoadItemsFromPersistedArgs(); } } // Allows special handling of set_ItemCount in derived class, // while maintaining API backward compatibility. internal virtual void InternalItemCountChangedHandler(int newItemCount) {} /// [ Bindable(true), DefaultValue(0), MobileCategory(SR.Category_Paging), MobileSysDescription(SR.PagedControl_ItemsPerPage) ] public int ItemsPerPage { get { object o = ViewState["ItemsPerPage"]; return (o != null) ? (int)o : 0; } set { if (value < 0) { throw new ArgumentOutOfRangeException("ItemsPerPage", SR.GetString(SR.PagedControl_ItemsPerPageCantBeNegative, value)); } ViewState["ItemsPerPage"] = value; } } /// protected virtual int ItemWeight { get { return ControlPager.DefaultWeight; } } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int FirstVisibleItemIndex { get { return (IsCustomPaging || !EnablePagination) ? 0 : PagerItemIndex; } } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int VisibleItemCount { get { return (IsCustomPaging || !EnablePagination) ? InternalItemCount : PagerItemCount; } } /// public override int VisibleWeight { get { // Paged control should count the weight as sum of its items int count = VisibleItemCount; if (count == -1) { return 0; // -1 means control not on the current page } else { return count * GetItemWeight(); } } } private ItemPager _itemPager; /// public override void PaginateRecursive(ControlPager pager) { int itemCount = IsCustomPaging ? ItemCount : InternalItemCount; int itemsPerPage = ItemsPerPage; _itemPager = pager.GetItemPager(this, itemCount, itemsPerPage, GetItemWeight()); } internal int GetItemWeight() { int weight = Adapter.ItemWeight; if (weight == ControlPager.UseDefaultWeight) { weight = ItemWeight; } return weight; } private int PagerItemIndex { get { return (_itemPager == null) ? 0 : _itemPager.ItemIndex; } } private int PagerItemCount { get { return (_itemPager == null) ? InternalItemCount : _itemPager.ItemCount; } } /// protected override void OnPageChange(int oldPageIndex, int newPageIndex) { _pagingCharacteristicsChanged = true; } /// protected override void OnPreRender(EventArgs e) { if (IsCustomPaging && IsVisibleOnPage(Form.CurrentPage) && (!Page.IsPostBack || Form.PaginationStateChanged || _pagingCharacteristicsChanged || !IsViewStateEnabled())) { OnLoadItems(); } base.OnPreRender(e); } internal override void SetControlPage(int page) { // Custom pagination being turned off. _itemPager = null; _pagingCharacteristicsChanged = true; base.SetControlPage(page); } private new bool IsViewStateEnabled() { for (Control ctl = this; ctl != null; ctl = ctl.Parent) { if (!ctl.EnableViewState) { return false; } } return true; } /// protected override Object SavePrivateViewState() { // If the base state is non-null, we always return a Pair with the base state as the // first item. Object baseState = base.SavePrivateViewState(); if (IsCustomPaging && IsTemplated && !IsViewStateEnabled() && _lastItemCountLoaded != -1) { return new Pair(baseState, new Pair(_lastItemIndexLoaded, _lastItemCountLoaded)); } if (baseState != null) { return new Pair(baseState, null); } // baseState is null return null; } /// protected override void LoadPrivateViewState(Object state) { Debug.Assert (state == null || state.GetType() == typeof(Pair), "If the base state is non-null, private viewstate should always be saved as a pair"); Pair statePair = state as Pair; if (statePair != null) { base.LoadPrivateViewState(statePair.First); _stateLoadItemsArgs = statePair.Second as Pair; ConditionalLoadItemsFromPersistedArgs(); } } // Loads items using view state pair in templated case where custom paging // on, view state off. In this special case, load items early as // possible to enable events to be raised. private void ConditionalLoadItemsFromPersistedArgs() { if (_stateLoadItemsArgs != null && IsCustomPaging && IsTemplated && !IsViewStateEnabled()) { OnLoadItems( new LoadItemsEventArgs((int) _stateLoadItemsArgs.First, (int) _stateLoadItemsArgs.Second)); _stateLoadItemsArgs = null; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StringTraceRecord.cs
- MenuItemCollection.cs
- DataGridViewBand.cs
- WindowsBrush.cs
- WebPartConnectionCollection.cs
- BaseAddressElement.cs
- Win32Exception.cs
- PluggableProtocol.cs
- ProfileSettings.cs
- ScriptControlManager.cs
- BCLDebug.cs
- DataSourceCacheDurationConverter.cs
- DnsPermission.cs
- FixedTextSelectionProcessor.cs
- HitTestDrawingContextWalker.cs
- SqlConnectionStringBuilder.cs
- SchemaElementDecl.cs
- Figure.cs
- BufferCache.cs
- SafeEventHandle.cs
- HelpOperationInvoker.cs
- SqlDataSourceCache.cs
- designeractionbehavior.cs
- DbConvert.cs
- RadioButtonFlatAdapter.cs
- TemplateComponentConnector.cs
- RotateTransform.cs
- SafeReadContext.cs
- _SingleItemRequestCache.cs
- PathSegmentCollection.cs
- GrabHandleGlyph.cs
- PrePrepareMethodAttribute.cs
- TableCellsCollectionEditor.cs
- WinFormsUtils.cs
- TimeZoneInfo.cs
- Hex.cs
- BaseTreeIterator.cs
- ButtonChrome.cs
- SafeFileMapViewHandle.cs
- xamlnodes.cs
- Unit.cs
- PolyBezierSegment.cs
- SqlOuterApplyReducer.cs
- ToolTip.cs
- WorkflowInstanceRecord.cs
- NetTcpBindingCollectionElement.cs
- EventLogPermissionEntryCollection.cs
- RecognitionEventArgs.cs
- _LazyAsyncResult.cs
- GridEntryCollection.cs
- FontFamily.cs
- TimeManager.cs
- DiffuseMaterial.cs
- DataGridViewColumnCollectionDialog.cs
- DbFunctionCommandTree.cs
- ConversionHelper.cs
- ValidationRuleCollection.cs
- SqlDataSource.cs
- PlanCompilerUtil.cs
- FixedStringLookup.cs
- ValidatedMobileControlConverter.cs
- CoreChannel.cs
- RSAOAEPKeyExchangeDeformatter.cs
- DBConnectionString.cs
- SqlServer2KCompatibilityAnnotation.cs
- CodeActivityMetadata.cs
- FirewallWrapper.cs
- NamespaceInfo.cs
- CultureTableRecord.cs
- TransformerTypeCollection.cs
- Model3D.cs
- TemplateKeyConverter.cs
- ToolTipService.cs
- DataGridState.cs
- GraphicsContainer.cs
- TextAnchor.cs
- XmlAtomicValue.cs
- SetIterators.cs
- DataGridViewSelectedColumnCollection.cs
- Component.cs
- ClientApiGenerator.cs
- OleDbError.cs
- XmlDataSourceDesigner.cs
- CollectionViewGroup.cs
- PortCache.cs
- ToolStripPanelRow.cs
- CalendarDateRangeChangingEventArgs.cs
- RowParagraph.cs
- ClientApiGenerator.cs
- StateBag.cs
- SymmetricSecurityProtocol.cs
- EdmItemCollection.cs
- TableLayoutPanelBehavior.cs
- SpeechDetectedEventArgs.cs
- StateChangeEvent.cs
- TaiwanLunisolarCalendar.cs
- DataGridAutoFormatDialog.cs
- Console.cs
- CodeEntryPointMethod.cs
- SamlSecurityToken.cs