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
- As.cs
- CheckPair.cs
- PersonalizationStateInfo.cs
- EdmRelationshipRoleAttribute.cs
- TextRangeEditTables.cs
- SyndicationSerializer.cs
- VolatileResourceManager.cs
- UTF32Encoding.cs
- EventLogQuery.cs
- SqlDataRecord.cs
- FocusTracker.cs
- PackagePartCollection.cs
- RedistVersionInfo.cs
- WriteableBitmap.cs
- SignatureHelper.cs
- SubpageParagraph.cs
- XmlSchemaSubstitutionGroup.cs
- TraceUtility.cs
- PointLight.cs
- FileDetails.cs
- IdnElement.cs
- HttpRuntime.cs
- SkinIDTypeConverter.cs
- LessThan.cs
- EventDriven.cs
- DbDataSourceEnumerator.cs
- MarkupExtensionSerializer.cs
- SQLBinaryStorage.cs
- ErrorTableItemStyle.cs
- BmpBitmapDecoder.cs
- CodeTypeMember.cs
- TailCallAnalyzer.cs
- SmiGettersStream.cs
- StackSpiller.Temps.cs
- XmlCharType.cs
- ConfigDefinitionUpdates.cs
- IDQuery.cs
- CompositionCommandSet.cs
- SQLInt32Storage.cs
- BuilderElements.cs
- RelationshipDetailsRow.cs
- ContentControl.cs
- Image.cs
- Collection.cs
- AsyncStreamReader.cs
- ReachObjectContext.cs
- XPathSelfQuery.cs
- FastEncoder.cs
- MenuBase.cs
- Convert.cs
- XamlFigureLengthSerializer.cs
- Trace.cs
- TextPenaltyModule.cs
- TextDocumentView.cs
- HandledEventArgs.cs
- TableProviderWrapper.cs
- TextViewSelectionProcessor.cs
- OleServicesContext.cs
- SkipQueryOptionExpression.cs
- LoginNameDesigner.cs
- MemberAssignmentAnalysis.cs
- COM2PropertyBuilderUITypeEditor.cs
- TextSimpleMarkerProperties.cs
- BehaviorService.cs
- FieldDescriptor.cs
- __Filters.cs
- SHA256Managed.cs
- ThemeableAttribute.cs
- ProcessModelSection.cs
- EmptyReadOnlyDictionaryInternal.cs
- ServiceContractListItem.cs
- XmlRawWriter.cs
- SchemaMapping.cs
- wgx_render.cs
- TextBox.cs
- ThreadSafeList.cs
- ObjectDataSourceFilteringEventArgs.cs
- ReflectionUtil.cs
- CriticalFinalizerObject.cs
- XmlSchemaAnnotation.cs
- IPCCacheManager.cs
- ToolStripSplitStackLayout.cs
- DispatcherFrame.cs
- OperationAbortedException.cs
- SelectionItemProviderWrapper.cs
- NativeCppClassAttribute.cs
- PasswordDeriveBytes.cs
- AncestorChangedEventArgs.cs
- ToolStripSettings.cs
- OdbcRowUpdatingEvent.cs
- DependencyObjectPropertyDescriptor.cs
- XmlArrayItemAttributes.cs
- XsltQilFactory.cs
- TextSelectionHelper.cs
- TypeNameConverter.cs
- XNodeValidator.cs
- DocumentAutomationPeer.cs
- srgsitem.cs
- BitmapVisualManager.cs
- SearchForVirtualItemEventArgs.cs