Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- ConnectionProviderAttribute.cs
- CodeMemberField.cs
- Logging.cs
- BaseParser.cs
- CollectionViewProxy.cs
- BulletedList.cs
- ControlValuePropertyAttribute.cs
- SimpleRecyclingCache.cs
- Visitor.cs
- SiteMapNodeItemEventArgs.cs
- OdbcCommand.cs
- Point3DKeyFrameCollection.cs
- SinglePageViewer.cs
- SocketInformation.cs
- StringFreezingAttribute.cs
- ValidatedControlConverter.cs
- PersonalizationProviderHelper.cs
- EndpointDiscoveryMetadata11.cs
- FaultContractAttribute.cs
- ColumnBinding.cs
- XmlLinkedNode.cs
- SafeNativeMethodsMilCoreApi.cs
- DrawingContext.cs
- ReceiveActivityValidator.cs
- AuthenticatingEventArgs.cs
- ListBindableAttribute.cs
- X509Chain.cs
- __TransparentProxy.cs
- StylusDevice.cs
- GridViewRowPresenter.cs
- QueryAccessibilityHelpEvent.cs
- PrintSystemException.cs
- DesignTimeType.cs
- List.cs
- TextRangeEdit.cs
- StringSorter.cs
- WindowsStatusBar.cs
- Error.cs
- ChangeTracker.cs
- SqlAliasesReferenced.cs
- StyleSheet.cs
- SRDisplayNameAttribute.cs
- _IPv6Address.cs
- HtmlTableRowCollection.cs
- CalendarDateRangeChangingEventArgs.cs
- InputProcessorProfilesLoader.cs
- SafeMILHandle.cs
- ProfileSettingsCollection.cs
- PenThread.cs
- TemplatePagerField.cs
- ContentPropertyAttribute.cs
- DisplayMemberTemplateSelector.cs
- ProviderUtil.cs
- CapabilitiesAssignment.cs
- PieceNameHelper.cs
- BaseDataBoundControl.cs
- SafeNativeMethods.cs
- TypeToArgumentTypeConverter.cs
- PropertyStore.cs
- NativeMethods.cs
- TextComposition.cs
- MissingFieldException.cs
- storepermission.cs
- StylusButtonEventArgs.cs
- MenuItemBinding.cs
- ScrollPatternIdentifiers.cs
- ProgressBar.cs
- MasterPageBuildProvider.cs
- CollectionsUtil.cs
- SemanticResolver.cs
- DataColumnPropertyDescriptor.cs
- ModuleElement.cs
- BypassElement.cs
- NativeMethods.cs
- CounterCreationData.cs
- DataGridColumnFloatingHeader.cs
- LocatorGroup.cs
- HwndSourceParameters.cs
- BaseAddressPrefixFilterElement.cs
- ResourceExpressionBuilder.cs
- _ConnectStream.cs
- MinimizableAttributeTypeConverter.cs
- WmlControlAdapter.cs
- ListViewTableCell.cs
- BStrWrapper.cs
- WindowsRichEdit.cs
- CatalogZoneBase.cs
- GridViewColumn.cs
- DesignerView.Commands.cs
- ClientBuildManager.cs
- AddToCollection.cs
- InvariantComparer.cs
- SendActivity.cs
- CompilerGeneratedAttribute.cs
- HttpModulesSection.cs
- InputManager.cs
- XamlToRtfWriter.cs
- RegistrySecurity.cs
- XamlTemplateSerializer.cs
- XPathDocumentNavigator.cs