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
- MenuItemBindingCollection.cs
- MenuItemCollection.cs
- PolyQuadraticBezierSegment.cs
- PermissionSetTriple.cs
- FileLevelControlBuilderAttribute.cs
- DataGridViewTextBoxEditingControl.cs
- DbSetClause.cs
- UserUseLicenseDictionaryLoader.cs
- CanonicalXml.cs
- ExpressionsCollectionConverter.cs
- WindowsImpersonationContext.cs
- StylusPlugin.cs
- VSDExceptions.cs
- SafeProcessHandle.cs
- XmlSerializerAssemblyAttribute.cs
- QilParameter.cs
- DataGridViewMethods.cs
- ErrorEventArgs.cs
- SafeArrayRankMismatchException.cs
- XPathCompileException.cs
- SubtreeProcessor.cs
- ScrollableControlDesigner.cs
- MeshGeometry3D.cs
- ListViewTableRow.cs
- StatusStrip.cs
- CodeMethodInvokeExpression.cs
- SignatureTargetIdManager.cs
- Query.cs
- StringAnimationBase.cs
- SignatureHelper.cs
- SelectionEditor.cs
- RepeatButton.cs
- SqlProvider.cs
- PeerMaintainer.cs
- wgx_commands.cs
- IncrementalReadDecoders.cs
- MenuAutomationPeer.cs
- SelectionRange.cs
- SimpleBitVector32.cs
- SessionStateContainer.cs
- LoginUtil.cs
- ViewRendering.cs
- NeutralResourcesLanguageAttribute.cs
- CorePropertiesFilter.cs
- SafeLibraryHandle.cs
- EventLogPermission.cs
- WebBrowsableAttribute.cs
- ReversePositionQuery.cs
- PtsCache.cs
- Token.cs
- ProfileParameter.cs
- XPathNodePointer.cs
- LabelLiteral.cs
- TextSimpleMarkerProperties.cs
- DoubleLink.cs
- IndentTextWriter.cs
- HostVisual.cs
- OdbcInfoMessageEvent.cs
- UpdatePanelControlTrigger.cs
- CountAggregationOperator.cs
- IBuiltInEvidence.cs
- LinqDataSourceHelper.cs
- NativeMethods.cs
- ProjectionPruner.cs
- MultipleViewPatternIdentifiers.cs
- Pkcs9Attribute.cs
- ProfileProvider.cs
- PrinterSettings.cs
- FormViewInsertedEventArgs.cs
- TreeView.cs
- _FtpDataStream.cs
- ColumnWidthChangedEvent.cs
- ExtensionQuery.cs
- SqlCrossApplyToCrossJoin.cs
- OleDbException.cs
- GridItem.cs
- OleServicesContext.cs
- CaseCqlBlock.cs
- FigureParaClient.cs
- InstanceLockTracking.cs
- DynamicHyperLink.cs
- XMLSchema.cs
- TextParentUndoUnit.cs
- HttpRequestBase.cs
- ConstraintManager.cs
- RandomDelayQueuedSendsAsyncResult.cs
- MetabaseSettingsIis7.cs
- HwndHost.cs
- QuerySettings.cs
- TreeViewCancelEvent.cs
- IERequestCache.cs
- ConnectionPoolManager.cs
- Enum.cs
- BamlRecordHelper.cs
- NamedPermissionSet.cs
- XmlSerializableServices.cs
- Parser.cs
- RegisteredExpandoAttribute.cs
- RoutedEventConverter.cs
- GlyphingCache.cs