Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- HttpRequestCacheValidator.cs
- SplitterPanel.cs
- ObservableDictionary.cs
- StateMachineTimers.cs
- CellParaClient.cs
- SimpleBitVector32.cs
- ActiveXSite.cs
- MimeWriter.cs
- DoubleStorage.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- ManagedWndProcTracker.cs
- Util.cs
- Section.cs
- AffineTransform3D.cs
- RunWorkerCompletedEventArgs.cs
- Membership.cs
- HybridDictionary.cs
- TraceUtils.cs
- ProcessModule.cs
- ApplicationInfo.cs
- mediapermission.cs
- FileClassifier.cs
- LookupBindingPropertiesAttribute.cs
- X509Utils.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- ProxyHelper.cs
- CompilationSection.cs
- LineBreakRecord.cs
- LayoutUtils.cs
- _NativeSSPI.cs
- ServiceReference.cs
- PreviewKeyDownEventArgs.cs
- Descriptor.cs
- _NestedMultipleAsyncResult.cs
- RuntimeHandles.cs
- XmlElementAttributes.cs
- SymLanguageVendor.cs
- ProfileServiceManager.cs
- LinearKeyFrames.cs
- IdleTimeoutMonitor.cs
- PipelineModuleStepContainer.cs
- TextViewDesigner.cs
- ToolStripItemImageRenderEventArgs.cs
- TextDocumentView.cs
- ExpressionBuilder.cs
- _SslStream.cs
- SelectionItemPattern.cs
- VisualBrush.cs
- ExpandoObject.cs
- XslTransformFileEditor.cs
- UnknownExceptionActionHelper.cs
- WeakReferenceKey.cs
- DataGridViewTopLeftHeaderCell.cs
- DispatchChannelSink.cs
- ScrollItemPattern.cs
- PolicyManager.cs
- ListenerHandler.cs
- HostProtectionPermission.cs
- ReliabilityContractAttribute.cs
- BindingSource.cs
- ContextMarshalException.cs
- WebPartRestoreVerb.cs
- XNodeSchemaApplier.cs
- mda.cs
- TypeDescriptionProviderAttribute.cs
- SrgsRule.cs
- JsonXmlDataContract.cs
- DataGridToolTip.cs
- RawStylusInputCustomData.cs
- AQNBuilder.cs
- EntityDataSourceContainerNameItem.cs
- DataGridColumnCollection.cs
- ListControlConvertEventArgs.cs
- TextElementEnumerator.cs
- TimeSpanStorage.cs
- SineEase.cs
- DocumentGrid.cs
- ReadOnlyKeyedCollection.cs
- MouseActionConverter.cs
- AppDomainGrammarProxy.cs
- DataServiceContext.cs
- ClientSettingsSection.cs
- SizeIndependentAnimationStorage.cs
- ZipIOExtraFieldZip64Element.cs
- HttpContextServiceHost.cs
- GeometryGroup.cs
- figurelengthconverter.cs
- ZipIOLocalFileDataDescriptor.cs
- DataGridViewCellStyle.cs
- PersonalizablePropertyEntry.cs
- DataTablePropertyDescriptor.cs
- HideDisabledControlAdapter.cs
- ThemeDirectoryCompiler.cs
- EventToken.cs
- CompilerResults.cs
- ParameterToken.cs
- RPIdentityRequirement.cs
- AccessControlEntry.cs
- DesignerActionListCollection.cs
- Blend.cs