Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- ToolStripSettings.cs
- DataBindingCollection.cs
- BinaryParser.cs
- RotateTransform.cs
- MenuTracker.cs
- XmlSchemaObjectTable.cs
- SerialPort.cs
- XslCompiledTransform.cs
- EntityDataSourceChangingEventArgs.cs
- sqlnorm.cs
- Object.cs
- DataRowChangeEvent.cs
- ManagementInstaller.cs
- CollectionsUtil.cs
- AnonymousIdentificationModule.cs
- NameNode.cs
- PermissionRequestEvidence.cs
- PkcsMisc.cs
- Model3DCollection.cs
- PeerCredential.cs
- MaterialCollection.cs
- HtmlFormAdapter.cs
- IdnElement.cs
- Pool.cs
- Assert.cs
- DefaultAssemblyResolver.cs
- ArrayConverter.cs
- COM2ExtendedTypeConverter.cs
- HostingEnvironmentException.cs
- SubqueryTrackingVisitor.cs
- ContainerParaClient.cs
- PassportAuthenticationModule.cs
- UriScheme.cs
- EqualityComparer.cs
- DefaultPrintController.cs
- DependencyPropertyKind.cs
- PasswordPropertyTextAttribute.cs
- InkCanvasSelectionAdorner.cs
- BuildProvider.cs
- StringCollection.cs
- StoreContentChangedEventArgs.cs
- InstanceCreationEditor.cs
- StreamReader.cs
- SystemMulticastIPAddressInformation.cs
- DictionaryGlobals.cs
- ToolboxItemAttribute.cs
- DelegateSerializationHolder.cs
- SystemException.cs
- UnicodeEncoding.cs
- Assembly.cs
- DataGrid.cs
- Funcletizer.cs
- OneOfTypeConst.cs
- MediaElementAutomationPeer.cs
- Int64KeyFrameCollection.cs
- XmlAttributeOverrides.cs
- SHA384Managed.cs
- ChangeConflicts.cs
- ExceptionHelpers.cs
- figurelengthconverter.cs
- XmlReader.cs
- Point3DValueSerializer.cs
- PrincipalPermission.cs
- DocumentPageViewAutomationPeer.cs
- PropertiesTab.cs
- SecurityDocument.cs
- CssStyleCollection.cs
- TextElement.cs
- Compilation.cs
- Base64Decoder.cs
- IISMapPath.cs
- ProcessInfo.cs
- NullableLongAverageAggregationOperator.cs
- NullableLongMinMaxAggregationOperator.cs
- LineSegment.cs
- ClockController.cs
- ListViewItem.cs
- ToolStripItemEventArgs.cs
- FamilyCollection.cs
- FusionWrap.cs
- KerberosSecurityTokenAuthenticator.cs
- SelectionPatternIdentifiers.cs
- TabControlAutomationPeer.cs
- MediaTimeline.cs
- Baml2006KnownTypes.cs
- AssemblyAttributesGoHere.cs
- WebEvents.cs
- SmiEventSink_Default.cs
- xmlfixedPageInfo.cs
- FileDetails.cs
- Help.cs
- HttpRuntime.cs
- DataService.cs
- ACE.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- XmlSchemaChoice.cs
- WsdlBuildProvider.cs
- DynamicScriptObject.cs
- FixUpCollection.cs
- ProjectionPath.cs