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
- ContentType.cs
- CryptoKeySecurity.cs
- SqlCharStream.cs
- Configuration.cs
- TargetFrameworkUtil.cs
- MessagePartDescriptionCollection.cs
- hresults.cs
- DataListDesigner.cs
- MimeParameter.cs
- SweepDirectionValidation.cs
- ClonableStack.cs
- DataTableClearEvent.cs
- SqlConnectionStringBuilder.cs
- ProcessModule.cs
- PersonalizableTypeEntry.cs
- CodeEventReferenceExpression.cs
- SymLanguageVendor.cs
- TextTreeDeleteContentUndoUnit.cs
- InvalidPipelineStoreException.cs
- ConnectionsZone.cs
- ExceptionValidationRule.cs
- ToolStripControlHost.cs
- RepeatButton.cs
- Literal.cs
- InstanceData.cs
- HtmlShimManager.cs
- GeometryHitTestResult.cs
- MappedMetaModel.cs
- GridViewEditEventArgs.cs
- HtmlInputSubmit.cs
- Lease.cs
- ControlOperationInvoker.cs
- DocumentsTrace.cs
- _TLSstream.cs
- InstanceHandleReference.cs
- BuildProviderAppliesToAttribute.cs
- GenericQueueSurrogate.cs
- FileClassifier.cs
- ScriptingSectionGroup.cs
- DataGridItemEventArgs.cs
- TransformerInfo.cs
- WindowsListViewScroll.cs
- SelectionWordBreaker.cs
- SnapLine.cs
- CustomAttribute.cs
- BridgeDataReader.cs
- ThreadPoolTaskScheduler.cs
- EntityParameterCollection.cs
- DuplicateDetector.cs
- XmlSerializerSection.cs
- PublisherIdentityPermission.cs
- SqlDataSourceEnumerator.cs
- ObjectViewListener.cs
- Solver.cs
- NodeInfo.cs
- WebContext.cs
- METAHEADER.cs
- AndCondition.cs
- SqlVisitor.cs
- BindingCompleteEventArgs.cs
- GeneralTransform3DTo2D.cs
- BaseTemplateCodeDomTreeGenerator.cs
- TabPageDesigner.cs
- HtmlFormParameterReader.cs
- RegexTree.cs
- TextEditorTables.cs
- Constants.cs
- NameSpaceEvent.cs
- NewExpression.cs
- DtdParser.cs
- GiveFeedbackEventArgs.cs
- GenericAuthenticationEventArgs.cs
- TextProperties.cs
- XmlIgnoreAttribute.cs
- NetMsmqBinding.cs
- StrongNameUtility.cs
- C14NUtil.cs
- DesignerCategoryAttribute.cs
- PropertyValueUIItem.cs
- bindurihelper.cs
- LocatorPart.cs
- DataViewManagerListItemTypeDescriptor.cs
- TreeNodeCollectionEditor.cs
- SetterBase.cs
- Queue.cs
- CursorInteropHelper.cs
- _SafeNetHandles.cs
- Publisher.cs
- contentDescriptor.cs
- SequenceDesignerAccessibleObject.cs
- DataSourceComponent.cs
- DbDataSourceEnumerator.cs
- BridgeDataReader.cs
- DiffuseMaterial.cs
- AccessText.cs
- serverconfig.cs
- ReflectionHelper.cs
- FixedDocument.cs
- Pair.cs
- SoapIncludeAttribute.cs