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
- webproxy.cs
- Parallel.cs
- ArgumentsParser.cs
- ToolStripTextBox.cs
- HttpContextServiceHost.cs
- PartialCachingControl.cs
- RootProjectionNode.cs
- Vector3DCollectionValueSerializer.cs
- ServiceObjectContainer.cs
- NativeMethods.cs
- ConsoleKeyInfo.cs
- RegexFCD.cs
- CodeCastExpression.cs
- SystemWebExtensionsSectionGroup.cs
- AnnotationComponentChooser.cs
- MimeFormatExtensions.cs
- CreateUserErrorEventArgs.cs
- SqlExpressionNullability.cs
- HitTestWithPointDrawingContextWalker.cs
- XmlEncodedRawTextWriter.cs
- DataControlCommands.cs
- TransformGroup.cs
- XmlChoiceIdentifierAttribute.cs
- SqlBuffer.cs
- SqlUnionizer.cs
- NonVisualControlAttribute.cs
- TransformPatternIdentifiers.cs
- BufferModesCollection.cs
- MimeMultiPart.cs
- SqlDataSourceConfigureSortForm.cs
- DescendantBaseQuery.cs
- DefaultExpressionVisitor.cs
- ScriptIgnoreAttribute.cs
- GeometryCombineModeValidation.cs
- DeviceContexts.cs
- HttpHandlersSection.cs
- SQLBoolean.cs
- Interop.cs
- DataGridViewCellCollection.cs
- StaticResourceExtension.cs
- InstanceLockException.cs
- ZipIORawDataFileBlock.cs
- DataStorage.cs
- ConfigXmlReader.cs
- TagMapInfo.cs
- PopupRootAutomationPeer.cs
- cache.cs
- GridViewSelectEventArgs.cs
- DbXmlEnabledProviderManifest.cs
- CornerRadiusConverter.cs
- Knowncolors.cs
- TypeUsageBuilder.cs
- XPathNodeList.cs
- TimeSpanValidatorAttribute.cs
- DBCommand.cs
- PinnedBufferMemoryStream.cs
- CodeCompileUnit.cs
- CodeGen.cs
- RegexBoyerMoore.cs
- Vector3DCollection.cs
- MappingSource.cs
- SequentialOutput.cs
- ListViewCancelEventArgs.cs
- AlternateView.cs
- Int32.cs
- PartialTrustVisibleAssembliesSection.cs
- RadioButton.cs
- DiscoveryEndpointValidator.cs
- ErrorActivity.cs
- HttpRequest.cs
- NamespaceTable.cs
- MetadataWorkspace.cs
- _DigestClient.cs
- PanelStyle.cs
- SingleConverter.cs
- Highlights.cs
- PositiveTimeSpanValidator.cs
- MachineKeySection.cs
- TCPListener.cs
- DataConnectionHelper.cs
- ToolStripContentPanel.cs
- NativeMethods.cs
- DbQueryCommandTree.cs
- SelectionProviderWrapper.cs
- PEFileReader.cs
- recordstate.cs
- StreamAsIStream.cs
- ColorConvertedBitmapExtension.cs
- ObjectListItem.cs
- ActivityCodeGenerator.cs
- ListItem.cs
- DataListItem.cs
- XmlSchemaSet.cs
- UnaryExpression.cs
- SqlReferenceCollection.cs
- UInt16.cs
- Control.cs
- Grant.cs
- ProfileServiceManager.cs
- WebReference.cs