Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / EntitySetDataBindingList.cs / 1305376 / EntitySetDataBindingList.cs
using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Diagnostics.CodeAnalysis; namespace System.Data.Linq { internal class EntitySetBindingList: SortableBindingList where TEntity : class { private EntitySet data; private TEntity addNewInstance; private TEntity cancelNewInstance; private bool addingNewInstance; internal EntitySetBindingList(IList sequence, EntitySet data) : base(sequence) { if (sequence == null) { throw Error.ArgumentNull("sequence"); } if (data == null) { throw Error.ArgumentNull("data"); } this.data = data; } [SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Justification="Unknown reason.")] private void ThrowEntitySetErrorsIfTypeInappropriate() { Type type = typeof(TEntity); if (type.IsAbstract) { throw Error.EntitySetDataBindingWithAbstractBaseClass(type.Name); } if (type.GetConstructor(System.Type.EmptyTypes) == null) { throw Error.EntitySetDataBindingWithNonPublicDefaultConstructor(type.Name); } } protected override object AddNewCore() { ThrowEntitySetErrorsIfTypeInappropriate(); addingNewInstance = true; addNewInstance = (TEntity)base.AddNewCore(); return addNewInstance; } protected override void InsertItem(int index, TEntity item) { base.InsertItem(index, item); if (!addingNewInstance && index >= 0 && index <= Count) { this.data.Insert(index, item); } } protected override void RemoveItem(int index) { if (index >= 0 && index < Count && this[index] == cancelNewInstance) { cancelNewInstance = null; } else { this.data.Remove(this[index]); } base.RemoveItem(index); } protected override void SetItem(int index, TEntity item) { TEntity removedItem = this[index]; base.SetItem(index, item); if (index >= 0 && index < Count) { //Check to see if the user is trying to set an item that is currently being added via AddNew //If so then the list should not continue the AddNew; but instead add the item //that is being passed in. if (removedItem == addNewInstance) { addNewInstance = null; addingNewInstance = false; } else { this.data.Remove(removedItem); } this.data.Insert(index,item); } } protected override void ClearItems() { this.data.Clear(); base.ClearItems(); } public override void EndNew(int itemIndex) { if (itemIndex >= 0 && itemIndex < Count && this[itemIndex] == addNewInstance) { this.data.Add(addNewInstance); addNewInstance = null; addingNewInstance = false; } base.EndNew(itemIndex); } public override void CancelNew(int itemIndex) { if (itemIndex >= 0 && itemIndex < Count && this[itemIndex] == addNewInstance) { cancelNewInstance = addNewInstance; addNewInstance = null; addingNewInstance = false; } base.CancelNew(itemIndex); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Diagnostics.CodeAnalysis; namespace System.Data.Linq { internal class EntitySetBindingList : SortableBindingList where TEntity : class { private EntitySet data; private TEntity addNewInstance; private TEntity cancelNewInstance; private bool addingNewInstance; internal EntitySetBindingList(IList sequence, EntitySet data) : base(sequence) { if (sequence == null) { throw Error.ArgumentNull("sequence"); } if (data == null) { throw Error.ArgumentNull("data"); } this.data = data; } [SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Justification="Unknown reason.")] private void ThrowEntitySetErrorsIfTypeInappropriate() { Type type = typeof(TEntity); if (type.IsAbstract) { throw Error.EntitySetDataBindingWithAbstractBaseClass(type.Name); } if (type.GetConstructor(System.Type.EmptyTypes) == null) { throw Error.EntitySetDataBindingWithNonPublicDefaultConstructor(type.Name); } } protected override object AddNewCore() { ThrowEntitySetErrorsIfTypeInappropriate(); addingNewInstance = true; addNewInstance = (TEntity)base.AddNewCore(); return addNewInstance; } protected override void InsertItem(int index, TEntity item) { base.InsertItem(index, item); if (!addingNewInstance && index >= 0 && index <= Count) { this.data.Insert(index, item); } } protected override void RemoveItem(int index) { if (index >= 0 && index < Count && this[index] == cancelNewInstance) { cancelNewInstance = null; } else { this.data.Remove(this[index]); } base.RemoveItem(index); } protected override void SetItem(int index, TEntity item) { TEntity removedItem = this[index]; base.SetItem(index, item); if (index >= 0 && index < Count) { //Check to see if the user is trying to set an item that is currently being added via AddNew //If so then the list should not continue the AddNew; but instead add the item //that is being passed in. if (removedItem == addNewInstance) { addNewInstance = null; addingNewInstance = false; } else { this.data.Remove(removedItem); } this.data.Insert(index,item); } } protected override void ClearItems() { this.data.Clear(); base.ClearItems(); } public override void EndNew(int itemIndex) { if (itemIndex >= 0 && itemIndex < Count && this[itemIndex] == addNewInstance) { this.data.Add(addNewInstance); addNewInstance = null; addingNewInstance = false; } base.EndNew(itemIndex); } public override void CancelNew(int itemIndex) { if (itemIndex >= 0 && itemIndex < Count && this[itemIndex] == addNewInstance) { cancelNewInstance = addNewInstance; addNewInstance = null; addingNewInstance = false; } base.CancelNew(itemIndex); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ConvertEvent.cs
- XPathChildIterator.cs
- _ProxyChain.cs
- WebPartEventArgs.cs
- DbConnectionHelper.cs
- SkipStoryboardToFill.cs
- SplashScreen.cs
- ErrorFormatterPage.cs
- DataBoundControlActionList.cs
- InheritanceContextHelper.cs
- DataGridViewCellStyleConverter.cs
- ProfileSettingsCollection.cs
- ComponentEditorPage.cs
- CompilerGeneratedAttribute.cs
- ScrollItemProviderWrapper.cs
- Win32MouseDevice.cs
- SchemaElementLookUpTableEnumerator.cs
- Queue.cs
- PictureBox.cs
- DataGridViewCellFormattingEventArgs.cs
- XmlSchemaSimpleContentExtension.cs
- Knowncolors.cs
- ThicknessAnimationBase.cs
- WebDisplayNameAttribute.cs
- RedirectionProxy.cs
- CombinedGeometry.cs
- Message.cs
- AnimationClock.cs
- SessionStateModule.cs
- XmlQueryContext.cs
- RangeValidator.cs
- RNGCryptoServiceProvider.cs
- SpnEndpointIdentityExtension.cs
- WeakReadOnlyCollection.cs
- AppSettingsReader.cs
- SizeAnimationClockResource.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- WebPartCollection.cs
- DPCustomTypeDescriptor.cs
- ExpressionWriter.cs
- LogicalCallContext.cs
- ControlCachePolicy.cs
- ByteStream.cs
- SID.cs
- Debugger.cs
- MessageSecurityOverMsmq.cs
- DurableOperationContext.cs
- TextTreeTextElementNode.cs
- RuntimeCompatibilityAttribute.cs
- CodeBlockBuilder.cs
- Overlapped.cs
- HtmlHead.cs
- XmlSchemas.cs
- ClientBuildManager.cs
- InvalidProgramException.cs
- DynamicDataResources.Designer.cs
- Cloud.cs
- SqlInternalConnectionSmi.cs
- RegisteredDisposeScript.cs
- TableSectionStyle.cs
- autovalidator.cs
- ByteAnimation.cs
- Item.cs
- GlyphElement.cs
- LicenseException.cs
- GZipUtils.cs
- DocumentPage.cs
- SqlNotificationEventArgs.cs
- TimeSpanFormat.cs
- UserControlParser.cs
- EFTableProvider.cs
- ControlIdConverter.cs
- DataGridViewRowsRemovedEventArgs.cs
- GenericTypeParameterBuilder.cs
- AdornerDecorator.cs
- ConstructorNeedsTagAttribute.cs
- SmtpAuthenticationManager.cs
- DoWorkEventArgs.cs
- SqlDataSourceDesigner.cs
- RootBrowserWindow.cs
- PersonalizationProvider.cs
- TransformerInfo.cs
- DateTimeEditor.cs
- ContainerVisual.cs
- TextElementEnumerator.cs
- IdnMapping.cs
- ObjectDataSourceDisposingEventArgs.cs
- ContractBase.cs
- CommandConverter.cs
- WindowsContainer.cs
- MinMaxParagraphWidth.cs
- MatrixStack.cs
- DateTimeOffset.cs
- CustomCredentialPolicy.cs
- EmptyReadOnlyDictionaryInternal.cs
- GAC.cs
- ValueTable.cs
- Oid.cs
- StylusPointPropertyInfoDefaults.cs
- Internal.cs