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
- FixedSOMSemanticBox.cs
- OrderedDictionaryStateHelper.cs
- TextElementEnumerator.cs
- ThreadAttributes.cs
- SafeRightsManagementPubHandle.cs
- GradientBrush.cs
- AppDomain.cs
- InitialServerConnectionReader.cs
- ListViewDeleteEventArgs.cs
- StringArrayConverter.cs
- WebPartUtil.cs
- KnownBoxes.cs
- Viewport2DVisual3D.cs
- SqlDataSourceEnumerator.cs
- RuntimeWrappedException.cs
- BamlLocalizer.cs
- ReflectTypeDescriptionProvider.cs
- EnumValAlphaComparer.cs
- CommandBindingCollection.cs
- DataSourceView.cs
- InArgumentConverter.cs
- BaseTemplateBuildProvider.cs
- __ConsoleStream.cs
- Crc32.cs
- TextDecoration.cs
- ImageSourceConverter.cs
- InProcStateClientManager.cs
- TypeSystem.cs
- KeyPullup.cs
- DataStreamFromComStream.cs
- WindowAutomationPeer.cs
- StreamSecurityUpgradeProvider.cs
- HashHelper.cs
- FileUtil.cs
- OutOfProcStateClientManager.cs
- InputLangChangeRequestEvent.cs
- EnumerationRangeValidationUtil.cs
- AdornedElementPlaceholder.cs
- LinqToSqlWrapper.cs
- XPathNodeList.cs
- DocumentXmlWriter.cs
- ModelToObjectValueConverter.cs
- CornerRadius.cs
- CustomValidator.cs
- FastEncoderWindow.cs
- VarInfo.cs
- COM2EnumConverter.cs
- CustomAttributeFormatException.cs
- HitTestWithGeometryDrawingContextWalker.cs
- PeerContact.cs
- PolyLineSegmentFigureLogic.cs
- LongPath.cs
- RegexFCD.cs
- COM2Properties.cs
- IImplicitResourceProvider.cs
- GenericPrincipal.cs
- DefaultValidator.cs
- PermissionRequestEvidence.cs
- EntityDataSourceView.cs
- ScrollChrome.cs
- DataSvcMapFile.cs
- AccessDataSourceView.cs
- DeferredBinaryDeserializerExtension.cs
- Highlights.cs
- ScriptingProfileServiceSection.cs
- CopyNamespacesAction.cs
- ResXResourceReader.cs
- PathFigureCollection.cs
- ColumnClickEvent.cs
- WCFBuildProvider.cs
- SendParametersContent.cs
- safex509handles.cs
- GridView.cs
- TextServicesPropertyRanges.cs
- FactoryMaker.cs
- GeometryConverter.cs
- VisualStyleInformation.cs
- ScriptingSectionGroup.cs
- TreeNodeBindingCollection.cs
- DataGridViewComboBoxEditingControl.cs
- HitTestResult.cs
- XPathAxisIterator.cs
- HwndSourceKeyboardInputSite.cs
- DetailsViewDeleteEventArgs.cs
- ParameterToken.cs
- DataGridViewButtonCell.cs
- MailAddress.cs
- CodeTypeDeclarationCollection.cs
- PerformanceCounterCategory.cs
- XamlReader.cs
- CommandSet.cs
- documentsequencetextcontainer.cs
- ColorAnimation.cs
- MailMessage.cs
- RelatedView.cs
- ObjectListTitleAttribute.cs
- DrawingContextWalker.cs
- SymbolEqualComparer.cs
- NativeMethods.cs
- TemplateLookupAction.cs