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
- UIElementCollection.cs
- LoginStatusDesigner.cs
- Style.cs
- FrameworkContentElement.cs
- BaseTemplateCodeDomTreeGenerator.cs
- PasswordTextContainer.cs
- GatewayIPAddressInformationCollection.cs
- HwndSourceKeyboardInputSite.cs
- TabletDevice.cs
- FilterQueryOptionExpression.cs
- SerializationInfo.cs
- mactripleDES.cs
- HttpContext.cs
- clipboard.cs
- SystemIcmpV6Statistics.cs
- ColorContextHelper.cs
- UniformGrid.cs
- DatagramAdapter.cs
- TriggerBase.cs
- GridView.cs
- ConnectionString.cs
- OverrideMode.cs
- XPathDocumentNavigator.cs
- InvalidFilterCriteriaException.cs
- CodeEventReferenceExpression.cs
- Lease.cs
- RSAPKCS1SignatureDeformatter.cs
- WorkflowHostingEndpoint.cs
- Visitor.cs
- XmlWriter.cs
- StorageTypeMapping.cs
- BindingList.cs
- SkinBuilder.cs
- MultipartIdentifier.cs
- DockAndAnchorLayout.cs
- DesignerVerb.cs
- TemplateModeChangedEventArgs.cs
- MenuCommandService.cs
- RawTextInputReport.cs
- Grant.cs
- SocketPermission.cs
- CapabilitiesPattern.cs
- StrongNamePublicKeyBlob.cs
- SimpleTypeResolver.cs
- ToolboxItem.cs
- FtpCachePolicyElement.cs
- Error.cs
- SpellerError.cs
- Baml2006SchemaContext.cs
- ProjectionPathSegment.cs
- IRCollection.cs
- ISSmlParser.cs
- Point3DValueSerializer.cs
- InlineUIContainer.cs
- SQLGuidStorage.cs
- PngBitmapEncoder.cs
- MouseGesture.cs
- ThaiBuddhistCalendar.cs
- ButtonFlatAdapter.cs
- ServiceNameCollection.cs
- TextParagraph.cs
- WebPartEditorCancelVerb.cs
- DataGridViewCellConverter.cs
- followingsibling.cs
- PrinterSettings.cs
- Point3DAnimationUsingKeyFrames.cs
- SelectedDatesCollection.cs
- ExecutionTracker.cs
- wgx_sdk_version.cs
- GeometryModel3D.cs
- MethodToken.cs
- TraceLevelStore.cs
- BmpBitmapEncoder.cs
- ModelItemCollection.cs
- Peer.cs
- ControlPaint.cs
- DynamicMetaObject.cs
- ComEventsMethod.cs
- SystemUnicastIPAddressInformation.cs
- HwndStylusInputProvider.cs
- Variable.cs
- Variant.cs
- MonikerSyntaxException.cs
- Positioning.cs
- SimpleBitVector32.cs
- InfoCardService.cs
- ThemeDirectoryCompiler.cs
- NamespaceInfo.cs
- UndirectedGraph.cs
- ToolStripSystemRenderer.cs
- TabControlCancelEvent.cs
- PeerHopCountAttribute.cs
- ManipulationStartedEventArgs.cs
- EventProviderClassic.cs
- LogicalTreeHelper.cs
- X500Name.cs
- ControlBindingsCollection.cs
- Executor.cs
- MimeTypeAttribute.cs
- DrawingCollection.cs