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
- Preprocessor.cs
- CurrentChangingEventArgs.cs
- WsdlInspector.cs
- DbConnectionStringCommon.cs
- WeakReferenceList.cs
- Metafile.cs
- OutputCacheSection.cs
- SmiRequestExecutor.cs
- SpinWait.cs
- LinearKeyFrames.cs
- DiscoveryClient.cs
- FileSecurity.cs
- Win32.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- __Error.cs
- TraversalRequest.cs
- MulticastIPAddressInformationCollection.cs
- LocalIdKeyIdentifierClause.cs
- DBConcurrencyException.cs
- MergeFailedEvent.cs
- DiscreteKeyFrames.cs
- _LocalDataStoreMgr.cs
- CommentEmitter.cs
- BlurEffect.cs
- SharedPersonalizationStateInfo.cs
- PerfCounterSection.cs
- TargetParameterCountException.cs
- MessageQueueInstaller.cs
- TextRunCache.cs
- SystemColorTracker.cs
- SamlAction.cs
- RunInstallerAttribute.cs
- SerializationHelper.cs
- IteratorDescriptor.cs
- MiniAssembly.cs
- Cursor.cs
- Pointer.cs
- DateTimeFormatInfoScanner.cs
- WindowsEditBoxRange.cs
- GPRECTF.cs
- RuleProcessor.cs
- AuthenticationModuleElementCollection.cs
- CssClassPropertyAttribute.cs
- ProtocolsConfiguration.cs
- UIPropertyMetadata.cs
- PagedControl.cs
- StdValidatorsAndConverters.cs
- DeploymentSection.cs
- UserControlAutomationPeer.cs
- WindowsRichEditRange.cs
- Metafile.cs
- MouseEventArgs.cs
- PerformanceCounterTraceRecord.cs
- CollectionAdapters.cs
- ColumnBinding.cs
- WebRequest.cs
- Symbol.cs
- HierarchicalDataSourceIDConverter.cs
- BaseTransportHeaders.cs
- PixelFormatConverter.cs
- EnterpriseServicesHelper.cs
- WebPartsPersonalization.cs
- ParallelTimeline.cs
- TraceHwndHost.cs
- XmlNamedNodeMap.cs
- ELinqQueryState.cs
- RequestCache.cs
- TemplatedEditableDesignerRegion.cs
- TableHeaderCell.cs
- Volatile.cs
- CodeGeneratorAttribute.cs
- CacheDependency.cs
- OuterGlowBitmapEffect.cs
- DataControlFieldHeaderCell.cs
- CheckoutException.cs
- ReferentialConstraint.cs
- Padding.cs
- TextEditorCharacters.cs
- _BufferOffsetSize.cs
- Button.cs
- ExpressionBuilderCollection.cs
- FileDialogCustomPlacesCollection.cs
- TileModeValidation.cs
- PageAdapter.cs
- StaticSiteMapProvider.cs
- CryptoKeySecurity.cs
- GeometryCombineModeValidation.cs
- VarInfo.cs
- BoolExpr.cs
- ResourceDescriptionAttribute.cs
- APCustomTypeDescriptor.cs
- DataGridViewCellStyle.cs
- SoapAttributes.cs
- DataTableReader.cs
- FixUp.cs
- SelectionProcessor.cs
- ObfuscateAssemblyAttribute.cs
- X509ChainPolicy.cs
- StreamSecurityUpgradeInitiatorBase.cs
- HScrollProperties.cs