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
- MenuEventArgs.cs
- SafeReversePInvokeHandle.cs
- PopupEventArgs.cs
- ThicknessAnimationBase.cs
- DoubleMinMaxAggregationOperator.cs
- PlatformNotSupportedException.cs
- ScriptingAuthenticationServiceSection.cs
- Main.cs
- CharacterBuffer.cs
- TypeElementCollection.cs
- PrintSystemException.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- WaveHeader.cs
- InstanceContextMode.cs
- HttpListener.cs
- ProtocolsConfiguration.cs
- NamespaceCollection.cs
- DependencyPropertyValueSerializer.cs
- ToolStripPanelRenderEventArgs.cs
- ControlAdapter.cs
- DynamicMethod.cs
- Overlapped.cs
- HScrollProperties.cs
- WebUtil.cs
- DependencyPropertyAttribute.cs
- SafeArrayRankMismatchException.cs
- SynthesizerStateChangedEventArgs.cs
- ObjectConverter.cs
- GradientBrush.cs
- RsaSecurityKey.cs
- ImportDesigner.xaml.cs
- VisualStyleElement.cs
- SoapIgnoreAttribute.cs
- ToolStripItemCollection.cs
- CacheEntry.cs
- SQLByte.cs
- CreateUserWizard.cs
- NonClientArea.cs
- IndentedWriter.cs
- CheckoutException.cs
- QueryRelOp.cs
- Switch.cs
- EmulateRecognizeCompletedEventArgs.cs
- ProfileBuildProvider.cs
- QueueProcessor.cs
- Label.cs
- XmlLanguage.cs
- CacheOutputQuery.cs
- CryptoApi.cs
- PointLightBase.cs
- ListDataHelper.cs
- MILUtilities.cs
- EditorZone.cs
- TableChangeProcessor.cs
- ReadWriteObjectLock.cs
- DebugController.cs
- ChildTable.cs
- LabelDesigner.cs
- InputReferenceExpression.cs
- SignerInfo.cs
- Qualifier.cs
- GridViewRowPresenterBase.cs
- SplitterEvent.cs
- DynamicScriptObject.cs
- ListViewItem.cs
- GridViewCellAutomationPeer.cs
- diagnosticsswitches.cs
- Thread.cs
- CodeAttachEventStatement.cs
- shaperfactoryquerycachekey.cs
- figurelength.cs
- Bitmap.cs
- ProviderSettings.cs
- DatatypeImplementation.cs
- UMPAttributes.cs
- ListViewHitTestInfo.cs
- BamlBinaryReader.cs
- ImageAnimator.cs
- CmsInterop.cs
- ObjectAssociationEndMapping.cs
- ReadOnlyKeyedCollection.cs
- TabItemAutomationPeer.cs
- SecurityPolicySection.cs
- Object.cs
- OracleParameter.cs
- HierarchicalDataTemplate.cs
- XmlSchemaAll.cs
- AutomationElementIdentifiers.cs
- ToolStripTextBox.cs
- EntitySqlException.cs
- FindCompletedEventArgs.cs
- Grid.cs
- RadioButton.cs
- HtmlContainerControl.cs
- TraceContext.cs
- FormatConvertedBitmap.cs
- TabletDeviceInfo.cs
- DrawListViewColumnHeaderEventArgs.cs
- Exceptions.cs
- shaperfactoryquerycacheentry.cs