Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / EntitySetDataBindingList.cs / 1305376 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ObjectAnimationBase.cs
- RayMeshGeometry3DHitTestResult.cs
- WebPartEditorOkVerb.cs
- TransformProviderWrapper.cs
- ReflectionPermission.cs
- FormsIdentity.cs
- TextFormatterContext.cs
- TemplateContent.cs
- BoundingRectTracker.cs
- DescendantQuery.cs
- _SslStream.cs
- ErrorFormatterPage.cs
- AutomationIdentifierGuids.cs
- DropDownButton.cs
- embossbitmapeffect.cs
- DropShadowBitmapEffect.cs
- WebScriptClientGenerator.cs
- GZipStream.cs
- LabelEditEvent.cs
- ResourceExpression.cs
- StringBuilder.cs
- AssemblyFilter.cs
- DataListItemCollection.cs
- SectionInput.cs
- DelimitedListTraceListener.cs
- VirtualDirectoryMappingCollection.cs
- StandardRuntimeEnumValidatorAttribute.cs
- UriTemplateHelpers.cs
- AsymmetricKeyExchangeDeformatter.cs
- Rect3DConverter.cs
- XPathNavigatorKeyComparer.cs
- ReadOnlyCollectionBase.cs
- FormsAuthentication.cs
- ReadOnlyTernaryTree.cs
- TextBox.cs
- TargetPerspective.cs
- AuthenticatedStream.cs
- SocketException.cs
- StrokeDescriptor.cs
- HashCryptoHandle.cs
- TransformerInfo.cs
- codemethodreferenceexpression.cs
- CodeTryCatchFinallyStatement.cs
- Calendar.cs
- RecordManager.cs
- PropertyGridEditorPart.cs
- SuspendDesigner.cs
- DataGridViewRowConverter.cs
- TextEditorTyping.cs
- ServiceEndpointCollection.cs
- ProfileSettingsCollection.cs
- MetadataUtil.cs
- ScaleTransform.cs
- APCustomTypeDescriptor.cs
- CollectionDataContractAttribute.cs
- StateWorkerRequest.cs
- DiscoveryEndpointValidator.cs
- ContractUtils.cs
- PermissionSetTriple.cs
- IpcChannel.cs
- SettingsPropertyCollection.cs
- BitmapCodecInfoInternal.cs
- ToolStripPanel.cs
- _BasicClient.cs
- DataProviderNameConverter.cs
- WsatConfiguration.cs
- InlineCategoriesDocument.cs
- CmsInterop.cs
- GeneralTransform3D.cs
- Encoding.cs
- COAUTHINFO.cs
- SqlRowUpdatedEvent.cs
- UInt64Converter.cs
- DataColumnChangeEvent.cs
- DbModificationCommandTree.cs
- MissingMethodException.cs
- SQLSingle.cs
- RowBinding.cs
- MailMessageEventArgs.cs
- RangeValuePattern.cs
- EntityExpressionVisitor.cs
- Matrix.cs
- AudioException.cs
- AppDomainFactory.cs
- FormView.cs
- XmlValidatingReaderImpl.cs
- DecoderBestFitFallback.cs
- SoapElementAttribute.cs
- SerialReceived.cs
- XslVisitor.cs
- RegexReplacement.cs
- XmlStrings.cs
- TimeZone.cs
- QueryOptionExpression.cs
- RegexGroupCollection.cs
- ExecutedRoutedEventArgs.cs
- _DomainName.cs
- InteropExecutor.cs
- DataListItemCollection.cs
- SystemKeyConverter.cs