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
- CodeIdentifiers.cs
- Registry.cs
- SoapIncludeAttribute.cs
- DateTimePicker.cs
- PropertySet.cs
- QueryServiceConfigHandle.cs
- DirectionalLight.cs
- XmlSchemaAttribute.cs
- __Error.cs
- AssemblyAttributesGoHere.cs
- DependencyObjectPropertyDescriptor.cs
- PenLineJoinValidation.cs
- MergeFailedEvent.cs
- bidPrivateBase.cs
- XmlSchemaSimpleTypeList.cs
- CachedPathData.cs
- CodeRemoveEventStatement.cs
- AttachmentCollection.cs
- FilterQueryOptionExpression.cs
- DESCryptoServiceProvider.cs
- BoolLiteral.cs
- TouchFrameEventArgs.cs
- Atom10FormatterFactory.cs
- RtfToXamlReader.cs
- HttpsTransportBindingElement.cs
- GroupQuery.cs
- DoubleLink.cs
- EndpointAddress10.cs
- ListItemConverter.cs
- XmlSchemaExporter.cs
- StylusButton.cs
- FontConverter.cs
- FileLogRecordHeader.cs
- CommandDevice.cs
- NativeMethods.cs
- FixedTextContainer.cs
- GenericRootAutomationPeer.cs
- UnsafeNativeMethods.cs
- Thumb.cs
- TabPanel.cs
- ModifierKeysValueSerializer.cs
- TypeTypeConverter.cs
- XmlComplianceUtil.cs
- HttpStreamFormatter.cs
- RenderOptions.cs
- ReflectionPermission.cs
- BCLDebug.cs
- LazyTextWriterCreator.cs
- ParsedAttributeCollection.cs
- ResourceDescriptionAttribute.cs
- OdbcConnectionOpen.cs
- SizeValueSerializer.cs
- Console.cs
- OutOfMemoryException.cs
- SubstitutionList.cs
- sqlmetadatafactory.cs
- processwaithandle.cs
- ContractsBCL.cs
- ChangeToolStripParentVerb.cs
- HyperLinkStyle.cs
- WebPartDeleteVerb.cs
- FilteredDataSetHelper.cs
- GetRecipientListRequest.cs
- CoTaskMemHandle.cs
- CollectionViewGroup.cs
- MethodImplAttribute.cs
- VisualStyleRenderer.cs
- HuffmanTree.cs
- HtmlForm.cs
- ImportContext.cs
- PriorityItem.cs
- NameValueCollection.cs
- BindingOperations.cs
- shaperfactoryquerycacheentry.cs
- Inflater.cs
- BooleanExpr.cs
- NullToBooleanConverter.cs
- AutomationElementCollection.cs
- FilterEventArgs.cs
- AdjustableArrowCap.cs
- IndexedSelectQueryOperator.cs
- SafeNativeMethods.cs
- TypeDependencyAttribute.cs
- XmlSchemaAll.cs
- _FixedSizeReader.cs
- DockAndAnchorLayout.cs
- ReliableMessagingHelpers.cs
- EmptyControlCollection.cs
- DefaultObjectSerializer.cs
- PublisherIdentityPermission.cs
- DelimitedListTraceListener.cs
- UnicastIPAddressInformationCollection.cs
- ClientViaElement.cs
- InheritablePropertyChangeInfo.cs
- DateTimeFormatInfoScanner.cs
- ListBoxItemWrapperAutomationPeer.cs
- DynamicValidatorEventArgs.cs
- Transform3D.cs
- DataServiceRequestArgs.cs
- AnchorEditor.cs