Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / xsp / System / Web / UI / WebControls / PagedDataSource.cs / 1 / PagedDataSource.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls { using System; using System.Collections; using System.ComponentModel; using System.Web.UI; using System.Security.Permissions; ////// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] public sealed class PagedDataSource : ICollection, ITypedList { private IEnumerable dataSource; private int currentPageIndex; private int pageSize; private bool allowPaging; private bool allowCustomPaging; private bool allowServerPaging; private int virtualCount; ///Provides a wrapper over an ICollection datasource to implement paging /// semantics or 'paged views' on top of the underlying datasource. ////// public PagedDataSource() { this.pageSize = 10; this.allowPaging = false; this.currentPageIndex = 0; this.allowCustomPaging = false; this.allowServerPaging = false; this.virtualCount = 0; } ///Initializes a new instance of the ///class. /// Indicates whether to assume the underlying datasource /// contains data for just the current page. /// public bool AllowCustomPaging { get { return allowCustomPaging; } set { allowCustomPaging = value; } } ////// public bool AllowPaging { get { return allowPaging; } set { allowPaging = value; } } ///Indicates whether to implement page semantics on top of the underlying datasource. ////// public bool AllowServerPaging { get { return allowServerPaging; } set { allowServerPaging = value; } } ///Indicates whether to implement page semantics on top of the underlying datasource. ////// public int Count { get { if (dataSource == null) return 0; if (IsPagingEnabled) { if (IsCustomPagingEnabled || (IsLastPage == false)) { // In custom paging the datasource can contain at most // a single page's worth of data. // In non-custom paging, all pages except last one have // a full page worth of data. return pageSize; } else { // last page might have fewer items in datasource return DataSourceCount - FirstIndexInPage; } } else { return DataSourceCount; } } } ////// Specifies the number of items /// to be used from the datasource. ////// public int CurrentPageIndex { get { return currentPageIndex; } set { currentPageIndex = value; } } ///Indicates the index of the current page. ////// public IEnumerable DataSource { get { return dataSource; } set { dataSource = value; } } ///Indicates the data source. ////// public int DataSourceCount { get { if (dataSource == null) return 0; if (IsCustomPagingEnabled || IsServerPagingEnabled) { return virtualCount; } else { if (dataSource is ICollection) { return ((ICollection)dataSource).Count; } else { // The caller should not call this in the case of an IEnumerator datasource // This is required for paging, but the assumption is that the user will set // up custom paging. throw new HttpException(SR.GetString(SR.PagedDataSource_Cannot_Get_Count)); } } } } ////// public int FirstIndexInPage { get { if ((dataSource == null) || (IsPagingEnabled == false)) { return 0; } else { if (IsCustomPagingEnabled || IsServerPagingEnabled) { // In this mode, all the data belongs to the current page. return 0; } else { return currentPageIndex * pageSize; } } } } ////// public bool IsCustomPagingEnabled { get { return IsPagingEnabled && allowCustomPaging; } } ////// public bool IsFirstPage { get { if (IsPagingEnabled) return(CurrentPageIndex == 0); else return true; } } ////// public bool IsLastPage { get { if (IsPagingEnabled) return(CurrentPageIndex == (PageCount - 1)); else return true; } } ////// public bool IsPagingEnabled { get { return allowPaging && (pageSize != 0); } } ////// public bool IsReadOnly { get { return false; } } ////// Indicates whether server-side paging is enabled /// public bool IsServerPagingEnabled { get { return IsPagingEnabled && allowServerPaging; } } ////// public bool IsSynchronized { get { return false; } } ////// public int PageCount { get { if (dataSource == null) return 0; int dataSourceItemCount = DataSourceCount; if (IsPagingEnabled && (dataSourceItemCount > 0)) { int pageCountNum = dataSourceItemCount + pageSize - 1; if (pageCountNum < 0) { return 1; // integer overflow } return (int)(pageCountNum/pageSize); } else { return 1; } } } ////// public int PageSize { get { return pageSize; } set { pageSize = value; } } ////// public object SyncRoot { get { return this; } } ////// public int VirtualCount { get { return virtualCount; } set { virtualCount = value; } } ////// public void CopyTo(Array array, int index) { for (IEnumerator e = this.GetEnumerator(); e.MoveNext();) array.SetValue(e.Current, index++); } ////// public IEnumerator GetEnumerator() { int startIndex = FirstIndexInPage; int count = -1; if (dataSource is ICollection) { count = Count; } if (dataSource is IList) { return new EnumeratorOnIList((IList)dataSource, startIndex, count); } else if (dataSource is Array) { return new EnumeratorOnArray((object[])dataSource, startIndex, count); } else if (dataSource is ICollection) { return new EnumeratorOnICollection((ICollection)dataSource, startIndex, count); } else { if (allowCustomPaging || allowServerPaging) { // startIndex does not matter // however count does... even if the data source contains more than 1 page of data in // it, we only want to enumerate over a single page of data // note: we can call Count here, even though we're dealing with an IEnumerator // because by now we have ensured that we're in custom paging mode return new EnumeratorOnIEnumerator(dataSource.GetEnumerator(), Count); } else { // startIndex and count don't matter since we're going to enumerate over all the // data (either non-paged or custom paging scenario) return dataSource.GetEnumerator(); } } } ////// public PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors) { if (dataSource == null) return null; if (dataSource is ITypedList) { return((ITypedList)dataSource).GetItemProperties(listAccessors); } return null; } ////// public string GetListName(PropertyDescriptor[] listAccessors) { return String.Empty; } ////// private sealed class EnumeratorOnIEnumerator : IEnumerator { private IEnumerator realEnum; private int index; private int indexBounds; public EnumeratorOnIEnumerator(IEnumerator realEnum, int count) { this.realEnum = realEnum; this.index = -1; this.indexBounds = count; } public object Current { get { return realEnum.Current; } } public bool MoveNext() { bool result = realEnum.MoveNext(); index++; return result && (index < indexBounds); } public void Reset() { realEnum.Reset(); index = -1; } } ////// private sealed class EnumeratorOnICollection : IEnumerator { private ICollection collection; private IEnumerator collectionEnum; private int startIndex; private int index; private int indexBounds; public EnumeratorOnICollection(ICollection collection, int startIndex, int count) { this.collection = collection; this.startIndex = startIndex; this.index = -1; this.indexBounds = startIndex + count; if (indexBounds > collection.Count) { indexBounds = collection.Count; } } public object Current { get { return collectionEnum.Current; } } public bool MoveNext() { if (collectionEnum == null) { collectionEnum = collection.GetEnumerator(); for (int i = 0; i < startIndex; i++) collectionEnum.MoveNext(); } collectionEnum.MoveNext(); index++; return (startIndex + index) < indexBounds; } public void Reset() { collectionEnum = null; index = -1; } } ////// private sealed class EnumeratorOnIList : IEnumerator { private IList collection; private int startIndex; private int index; private int indexBounds; public EnumeratorOnIList(IList collection, int startIndex, int count) { this.collection = collection; this.startIndex = startIndex; this.index = -1; this.indexBounds = startIndex + count; if (indexBounds > collection.Count) { indexBounds = collection.Count; } } public object Current { get { if (index < 0) { throw new InvalidOperationException(SR.GetString(SR.Enumerator_MoveNext_Not_Called)); } return collection[startIndex + index]; } } public bool MoveNext() { index++; return (startIndex + index) < indexBounds; } public void Reset() { index = -1; } } ////// private sealed class EnumeratorOnArray : IEnumerator { private object[] array; private int startIndex; private int index; private int indexBounds; public EnumeratorOnArray(object[] array, int startIndex, int count) { this.array = array; this.startIndex = startIndex; this.index = -1; this.indexBounds = startIndex + count; if (indexBounds > array.Length) { indexBounds = array.Length; } } public object Current { get { if (index < 0) { throw new InvalidOperationException(SR.GetString(SR.Enumerator_MoveNext_Not_Called)); } return array[startIndex + index]; } } public bool MoveNext() { index++; return (startIndex + index) < indexBounds; } public void Reset() { index = -1; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls { using System; using System.Collections; using System.ComponentModel; using System.Web.UI; using System.Security.Permissions; ////// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] public sealed class PagedDataSource : ICollection, ITypedList { private IEnumerable dataSource; private int currentPageIndex; private int pageSize; private bool allowPaging; private bool allowCustomPaging; private bool allowServerPaging; private int virtualCount; ///Provides a wrapper over an ICollection datasource to implement paging /// semantics or 'paged views' on top of the underlying datasource. ////// public PagedDataSource() { this.pageSize = 10; this.allowPaging = false; this.currentPageIndex = 0; this.allowCustomPaging = false; this.allowServerPaging = false; this.virtualCount = 0; } ///Initializes a new instance of the ///class. /// Indicates whether to assume the underlying datasource /// contains data for just the current page. /// public bool AllowCustomPaging { get { return allowCustomPaging; } set { allowCustomPaging = value; } } ////// public bool AllowPaging { get { return allowPaging; } set { allowPaging = value; } } ///Indicates whether to implement page semantics on top of the underlying datasource. ////// public bool AllowServerPaging { get { return allowServerPaging; } set { allowServerPaging = value; } } ///Indicates whether to implement page semantics on top of the underlying datasource. ////// public int Count { get { if (dataSource == null) return 0; if (IsPagingEnabled) { if (IsCustomPagingEnabled || (IsLastPage == false)) { // In custom paging the datasource can contain at most // a single page's worth of data. // In non-custom paging, all pages except last one have // a full page worth of data. return pageSize; } else { // last page might have fewer items in datasource return DataSourceCount - FirstIndexInPage; } } else { return DataSourceCount; } } } ////// Specifies the number of items /// to be used from the datasource. ////// public int CurrentPageIndex { get { return currentPageIndex; } set { currentPageIndex = value; } } ///Indicates the index of the current page. ////// public IEnumerable DataSource { get { return dataSource; } set { dataSource = value; } } ///Indicates the data source. ////// public int DataSourceCount { get { if (dataSource == null) return 0; if (IsCustomPagingEnabled || IsServerPagingEnabled) { return virtualCount; } else { if (dataSource is ICollection) { return ((ICollection)dataSource).Count; } else { // The caller should not call this in the case of an IEnumerator datasource // This is required for paging, but the assumption is that the user will set // up custom paging. throw new HttpException(SR.GetString(SR.PagedDataSource_Cannot_Get_Count)); } } } } ////// public int FirstIndexInPage { get { if ((dataSource == null) || (IsPagingEnabled == false)) { return 0; } else { if (IsCustomPagingEnabled || IsServerPagingEnabled) { // In this mode, all the data belongs to the current page. return 0; } else { return currentPageIndex * pageSize; } } } } ////// public bool IsCustomPagingEnabled { get { return IsPagingEnabled && allowCustomPaging; } } ////// public bool IsFirstPage { get { if (IsPagingEnabled) return(CurrentPageIndex == 0); else return true; } } ////// public bool IsLastPage { get { if (IsPagingEnabled) return(CurrentPageIndex == (PageCount - 1)); else return true; } } ////// public bool IsPagingEnabled { get { return allowPaging && (pageSize != 0); } } ////// public bool IsReadOnly { get { return false; } } ////// Indicates whether server-side paging is enabled /// public bool IsServerPagingEnabled { get { return IsPagingEnabled && allowServerPaging; } } ////// public bool IsSynchronized { get { return false; } } ////// public int PageCount { get { if (dataSource == null) return 0; int dataSourceItemCount = DataSourceCount; if (IsPagingEnabled && (dataSourceItemCount > 0)) { int pageCountNum = dataSourceItemCount + pageSize - 1; if (pageCountNum < 0) { return 1; // integer overflow } return (int)(pageCountNum/pageSize); } else { return 1; } } } ////// public int PageSize { get { return pageSize; } set { pageSize = value; } } ////// public object SyncRoot { get { return this; } } ////// public int VirtualCount { get { return virtualCount; } set { virtualCount = value; } } ////// public void CopyTo(Array array, int index) { for (IEnumerator e = this.GetEnumerator(); e.MoveNext();) array.SetValue(e.Current, index++); } ////// public IEnumerator GetEnumerator() { int startIndex = FirstIndexInPage; int count = -1; if (dataSource is ICollection) { count = Count; } if (dataSource is IList) { return new EnumeratorOnIList((IList)dataSource, startIndex, count); } else if (dataSource is Array) { return new EnumeratorOnArray((object[])dataSource, startIndex, count); } else if (dataSource is ICollection) { return new EnumeratorOnICollection((ICollection)dataSource, startIndex, count); } else { if (allowCustomPaging || allowServerPaging) { // startIndex does not matter // however count does... even if the data source contains more than 1 page of data in // it, we only want to enumerate over a single page of data // note: we can call Count here, even though we're dealing with an IEnumerator // because by now we have ensured that we're in custom paging mode return new EnumeratorOnIEnumerator(dataSource.GetEnumerator(), Count); } else { // startIndex and count don't matter since we're going to enumerate over all the // data (either non-paged or custom paging scenario) return dataSource.GetEnumerator(); } } } ////// public PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors) { if (dataSource == null) return null; if (dataSource is ITypedList) { return((ITypedList)dataSource).GetItemProperties(listAccessors); } return null; } ////// public string GetListName(PropertyDescriptor[] listAccessors) { return String.Empty; } ////// private sealed class EnumeratorOnIEnumerator : IEnumerator { private IEnumerator realEnum; private int index; private int indexBounds; public EnumeratorOnIEnumerator(IEnumerator realEnum, int count) { this.realEnum = realEnum; this.index = -1; this.indexBounds = count; } public object Current { get { return realEnum.Current; } } public bool MoveNext() { bool result = realEnum.MoveNext(); index++; return result && (index < indexBounds); } public void Reset() { realEnum.Reset(); index = -1; } } ////// private sealed class EnumeratorOnICollection : IEnumerator { private ICollection collection; private IEnumerator collectionEnum; private int startIndex; private int index; private int indexBounds; public EnumeratorOnICollection(ICollection collection, int startIndex, int count) { this.collection = collection; this.startIndex = startIndex; this.index = -1; this.indexBounds = startIndex + count; if (indexBounds > collection.Count) { indexBounds = collection.Count; } } public object Current { get { return collectionEnum.Current; } } public bool MoveNext() { if (collectionEnum == null) { collectionEnum = collection.GetEnumerator(); for (int i = 0; i < startIndex; i++) collectionEnum.MoveNext(); } collectionEnum.MoveNext(); index++; return (startIndex + index) < indexBounds; } public void Reset() { collectionEnum = null; index = -1; } } ////// private sealed class EnumeratorOnIList : IEnumerator { private IList collection; private int startIndex; private int index; private int indexBounds; public EnumeratorOnIList(IList collection, int startIndex, int count) { this.collection = collection; this.startIndex = startIndex; this.index = -1; this.indexBounds = startIndex + count; if (indexBounds > collection.Count) { indexBounds = collection.Count; } } public object Current { get { if (index < 0) { throw new InvalidOperationException(SR.GetString(SR.Enumerator_MoveNext_Not_Called)); } return collection[startIndex + index]; } } public bool MoveNext() { index++; return (startIndex + index) < indexBounds; } public void Reset() { index = -1; } } ////// private sealed class EnumeratorOnArray : IEnumerator { private object[] array; private int startIndex; private int index; private int indexBounds; public EnumeratorOnArray(object[] array, int startIndex, int count) { this.array = array; this.startIndex = startIndex; this.index = -1; this.indexBounds = startIndex + count; if (indexBounds > array.Length) { indexBounds = array.Length; } } public object Current { get { if (index < 0) { throw new InvalidOperationException(SR.GetString(SR.Enumerator_MoveNext_Not_Called)); } return array[startIndex + index]; } } public bool MoveNext() { index++; return (startIndex + index) < indexBounds; } public void Reset() { index = -1; } } } } // 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
- SafeRightsManagementSessionHandle.cs
- DetailsViewUpdatedEventArgs.cs
- CodeDOMProvider.cs
- FormattedText.cs
- ModelItemKeyValuePair.cs
- EnumValAlphaComparer.cs
- CLRBindingWorker.cs
- wgx_exports.cs
- SourceLocation.cs
- OrderedDictionaryStateHelper.cs
- TrackingValidationObjectDictionary.cs
- HttpCapabilitiesEvaluator.cs
- ContextMenu.cs
- WinFormsSecurity.cs
- ClientData.cs
- hebrewshape.cs
- XmlILOptimizerVisitor.cs
- ObjectQueryProvider.cs
- RijndaelManagedTransform.cs
- CacheSection.cs
- TTSEngineProxy.cs
- Identity.cs
- PathTooLongException.cs
- SchemaNotation.cs
- ImageButton.cs
- UIElement3DAutomationPeer.cs
- FullTextState.cs
- ThreadAttributes.cs
- SchemaAttDef.cs
- ListMarkerLine.cs
- WindowsToolbarItemAsMenuItem.cs
- TableHeaderCell.cs
- ObjectCloneHelper.cs
- BinaryObjectWriter.cs
- CommandLibraryHelper.cs
- DesignerLabelAdapter.cs
- XmlSchemaSimpleTypeRestriction.cs
- PlatformNotSupportedException.cs
- ToolBarButton.cs
- Rotation3DAnimationUsingKeyFrames.cs
- Bold.cs
- WindowsTokenRoleProvider.cs
- GreaterThanOrEqual.cs
- RoutedEventArgs.cs
- IgnoreDataMemberAttribute.cs
- SimpleHandlerFactory.cs
- SqlNotificationRequest.cs
- ConvertEvent.cs
- AnnotationResource.cs
- String.cs
- ReadOnlyDataSource.cs
- HtmlControlPersistable.cs
- DataControlFieldCollection.cs
- FormClosingEvent.cs
- ClientScriptManager.cs
- SqlDelegatedTransaction.cs
- AuthenticationService.cs
- ObjectStateEntry.cs
- PaginationProgressEventArgs.cs
- AccessedThroughPropertyAttribute.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- ObfuscateAssemblyAttribute.cs
- PriorityChain.cs
- PolyLineSegment.cs
- SafeHandle.cs
- LabelDesigner.cs
- xmlsaver.cs
- ValidationErrorEventArgs.cs
- EventDriven.cs
- ToolStripDropDownMenu.cs
- DragDeltaEventArgs.cs
- ThumbAutomationPeer.cs
- ColumnHeaderConverter.cs
- X509AsymmetricSecurityKey.cs
- RepeaterCommandEventArgs.cs
- StrongNamePublicKeyBlob.cs
- PixelFormats.cs
- PolicyStatement.cs
- wgx_sdk_version.cs
- DbConnectionOptions.cs
- CatalogZone.cs
- XmlSigningNodeWriter.cs
- RegionData.cs
- TextDecoration.cs
- UniformGrid.cs
- OperatingSystemVersionCheck.cs
- WebFaultClientMessageInspector.cs
- mda.cs
- DiscoveryDocumentSerializer.cs
- Selection.cs
- LicenseProviderAttribute.cs
- EntitySqlQueryBuilder.cs
- NotConverter.cs
- PlainXmlSerializer.cs
- IMembershipProvider.cs
- FontConverter.cs
- IssuanceLicense.cs
- TextSpanModifier.cs
- SpotLight.cs
- InvalidCastException.cs