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
- PropertyRef.cs
- SafeSystemMetrics.cs
- SmiEventSink.cs
- WorkflowValidationFailedException.cs
- ContainsSearchOperator.cs
- InputProviderSite.cs
- HtmlInputRadioButton.cs
- BeginCreateSecurityTokenRequest.cs
- TimeoutException.cs
- StoreConnection.cs
- XpsStructure.cs
- SettingsBindableAttribute.cs
- FontFamilyIdentifier.cs
- PriorityItem.cs
- DelegateBodyWriter.cs
- MultiBindingExpression.cs
- PassportAuthenticationModule.cs
- XmlObjectSerializer.cs
- ToolStripPanel.cs
- smtpconnection.cs
- BitmapData.cs
- JapaneseCalendar.cs
- BasicKeyConstraint.cs
- DataControlButton.cs
- DataSourceControl.cs
- JumpItem.cs
- RawStylusSystemGestureInputReport.cs
- BatchWriter.cs
- NameTable.cs
- LocatorPart.cs
- PriorityBinding.cs
- FontDriver.cs
- RuleEngine.cs
- ByteConverter.cs
- TreeView.cs
- TimelineGroup.cs
- CookielessHelper.cs
- DataSourceHelper.cs
- DataGridViewAutoSizeModeEventArgs.cs
- GZipDecoder.cs
- Journaling.cs
- XmlBaseReader.cs
- RelatedPropertyManager.cs
- SelectedGridItemChangedEvent.cs
- X509ChainPolicy.cs
- ArcSegment.cs
- MetadataUtilsSmi.cs
- SwitchLevelAttribute.cs
- RecipientInfo.cs
- OdbcDataAdapter.cs
- HtmlElementErrorEventArgs.cs
- Crypto.cs
- DataFormats.cs
- ReflectTypeDescriptionProvider.cs
- Sentence.cs
- OdbcConnectionOpen.cs
- SimpleModelProvider.cs
- HttpCachePolicyElement.cs
- TargetParameterCountException.cs
- DataSetUtil.cs
- HMAC.cs
- ValidationError.cs
- PeerCustomResolverSettings.cs
- TimeZone.cs
- HtmlInputHidden.cs
- ActivationService.cs
- ControlEvent.cs
- MemberProjectionIndex.cs
- ImageIndexEditor.cs
- UnsafeNativeMethods.cs
- WindowsNonControl.cs
- WebPartVerbCollection.cs
- EntityDataSourceContextDisposingEventArgs.cs
- NameValuePair.cs
- FreezableOperations.cs
- GregorianCalendar.cs
- SQLInt32.cs
- DeclarationUpdate.cs
- ToolStripTextBox.cs
- PeerNameRecordCollection.cs
- Italic.cs
- XPathBinder.cs
- DBParameter.cs
- PolicyLevel.cs
- HtmlTable.cs
- WebPartUserCapability.cs
- PageCopyCount.cs
- FormViewInsertEventArgs.cs
- XamlReader.cs
- _NetworkingPerfCounters.cs
- MailMessageEventArgs.cs
- ClrPerspective.cs
- ApplicationId.cs
- UnmanagedMarshal.cs
- ResourceCodeDomSerializer.cs
- CookielessHelper.cs
- TemplateAction.cs
- DisplayNameAttribute.cs
- QueryCursorEventArgs.cs
- FirstMatchCodeGroup.cs