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
- DataGridViewSelectedCellsAccessibleObject.cs
- EnglishPluralizationService.cs
- ApplicationManager.cs
- RelativeSource.cs
- Latin1Encoding.cs
- TableRow.cs
- CodeIdentifier.cs
- ButtonFieldBase.cs
- AsyncResult.cs
- SerialErrors.cs
- SynchronizationContext.cs
- ConfigurationManagerInternalFactory.cs
- Validator.cs
- ConnectionStringsExpressionBuilder.cs
- BamlVersionHeader.cs
- PeerDefaultCustomResolverClient.cs
- ParameterReplacerVisitor.cs
- DesignerVerbToolStripMenuItem.cs
- ResolveDuplex11AsyncResult.cs
- PageCodeDomTreeGenerator.cs
- TopClause.cs
- WindowsSpinner.cs
- EntityTypeBase.cs
- CheckBoxBaseAdapter.cs
- DocumentViewerBase.cs
- StatusBar.cs
- DirectoryInfo.cs
- CollectionsUtil.cs
- XmlCharacterData.cs
- Rotation3DAnimationBase.cs
- StatusBar.cs
- SystemDiagnosticsSection.cs
- OperationResponse.cs
- PropertyValueEditor.cs
- EdmSchemaAttribute.cs
- WindowManager.cs
- ClientRoleProvider.cs
- StandardCommands.cs
- UnionCodeGroup.cs
- SaveFileDialog.cs
- ServicesUtilities.cs
- QilChoice.cs
- XmlName.cs
- HtmlCommandAdapter.cs
- XmlAutoDetectWriter.cs
- ScrollableControl.cs
- SafeNativeMemoryHandle.cs
- InstanceDataCollectionCollection.cs
- XmlImplementation.cs
- DivideByZeroException.cs
- Validator.cs
- SiteOfOriginPart.cs
- ZipIOExtraFieldPaddingElement.cs
- FunctionUpdateCommand.cs
- SafeNativeMethods.cs
- DataKeyArray.cs
- IdentityValidationException.cs
- SynchronousReceiveElement.cs
- NullableConverter.cs
- Not.cs
- RegexStringValidator.cs
- AsymmetricKeyExchangeFormatter.cs
- Int32RectConverter.cs
- OdbcTransaction.cs
- WorkflowMessageEventArgs.cs
- SchemeSettingElement.cs
- wpf-etw.cs
- DataMisalignedException.cs
- WinEventQueueItem.cs
- ClientTarget.cs
- MetadataWorkspace.cs
- HighlightComponent.cs
- MDIClient.cs
- InheritanceService.cs
- SR.Designer.cs
- Italic.cs
- SQLInt32Storage.cs
- XmlSchemaFacet.cs
- OutputCacheSettings.cs
- Translator.cs
- NotSupportedException.cs
- DocumentPageView.cs
- PKCS1MaskGenerationMethod.cs
- InfiniteIntConverter.cs
- EventLogQuery.cs
- CodeEventReferenceExpression.cs
- Latin1Encoding.cs
- TemplateControlCodeDomTreeGenerator.cs
- RefreshEventArgs.cs
- Axis.cs
- ActivityTrace.cs
- PTManager.cs
- CodeArrayCreateExpression.cs
- MediaElement.cs
- Bits.cs
- SqlUDTStorage.cs
- DataView.cs
- TcpTransportElement.cs
- ReferenceAssemblyAttribute.cs
- XmlAutoDetectWriter.cs