Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DLinq / Dlinq / EntitySetDataBindingList.cs / 1 / 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
- HttpStaticObjectsCollectionWrapper.cs
- ArcSegment.cs
- Int32Rect.cs
- __FastResourceComparer.cs
- DataProtection.cs
- Deserializer.cs
- WindowsListViewGroup.cs
- MappingModelBuildProvider.cs
- FileDialog.cs
- XmlSchemaValidationException.cs
- ProcessHostConfigUtils.cs
- AuthenticateEventArgs.cs
- ListSourceHelper.cs
- DbReferenceCollection.cs
- Calendar.cs
- WorkflowCompensationBehavior.cs
- CompilerGlobalScopeAttribute.cs
- unsafenativemethodsother.cs
- ManagementClass.cs
- Tuple.cs
- EntityDataSourceEntitySetNameItem.cs
- SimplePropertyEntry.cs
- EntityParameterCollection.cs
- ByteStreamGeometryContext.cs
- XmlSchemaComplexType.cs
- CounterCreationDataCollection.cs
- ProxyOperationRuntime.cs
- DuplicateDetector.cs
- TypeBuilderInstantiation.cs
- MetadataElement.cs
- DrawingContextWalker.cs
- CheckBoxRenderer.cs
- InvokeMethodActivity.cs
- ToolboxItemAttribute.cs
- OperatingSystem.cs
- ActiveXSite.cs
- RuntimeCompatibilityAttribute.cs
- ReadOnlyDataSource.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- ApplicationTrust.cs
- ParameterCollection.cs
- XmlSchemaComplexContent.cs
- Rotation3DAnimationBase.cs
- NameHandler.cs
- PassportPrincipal.cs
- Hash.cs
- ParserContext.cs
- EnumValAlphaComparer.cs
- BlurBitmapEffect.cs
- UpdateExpressionVisitor.cs
- GridProviderWrapper.cs
- WebBrowsableAttribute.cs
- CharEntityEncoderFallback.cs
- Column.cs
- MULTI_QI.cs
- AssemblyCache.cs
- DataGridViewColumnConverter.cs
- XmlReflectionImporter.cs
- SrgsDocumentParser.cs
- XmlSchemaAttribute.cs
- FixedSOMTableCell.cs
- SqlTypesSchemaImporter.cs
- ControlUtil.cs
- ConfigXmlCDataSection.cs
- RectangleF.cs
- XPathSingletonIterator.cs
- ProcessRequestArgs.cs
- ReadWriteObjectLock.cs
- ConfigXmlReader.cs
- XmlEncodedRawTextWriter.cs
- ScriptRegistrationManager.cs
- HostProtectionPermission.cs
- SQLByte.cs
- ToolStripItemImageRenderEventArgs.cs
- DBCSCodePageEncoding.cs
- UnknownBitmapEncoder.cs
- MulticastIPAddressInformationCollection.cs
- RelationshipEnd.cs
- ModifierKeysValueSerializer.cs
- SqlTypeConverter.cs
- SafeNativeMethodsOther.cs
- WebMethodAttribute.cs
- XmlSchemaAnnotated.cs
- QilNode.cs
- HtmlEncodedRawTextWriter.cs
- Privilege.cs
- XmlReturnReader.cs
- ArgIterator.cs
- DataListGeneralPage.cs
- SqlRetyper.cs
- SynchronizedRandom.cs
- ContextMarshalException.cs
- ContextMenu.cs
- PageTheme.cs
- DurableInstanceProvider.cs
- TabletDeviceInfo.cs
- TemplateParser.cs
- Invariant.cs
- IPHostEntry.cs
- SchemaImporter.cs