Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DLinq / Dlinq / EntitySetDataBindingList.cs / 1 / 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.
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
- PackageDocument.cs
- CompressedStack.cs
- Mappings.cs
- NumberSubstitution.cs
- ProfileEventArgs.cs
- RepeaterCommandEventArgs.cs
- DuplexChannelBinder.cs
- RequiredFieldValidator.cs
- ClientConfigPaths.cs
- PropertyCondition.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- SettingsPropertyCollection.cs
- WeakKeyDictionary.cs
- HttpApplication.cs
- SafeBitVector32.cs
- HttpModuleActionCollection.cs
- ToolStripManager.cs
- RemotingAttributes.cs
- NativeObjectSecurity.cs
- MergeFailedEvent.cs
- CacheHelper.cs
- EventLogPermissionEntry.cs
- X509CertificateStore.cs
- SqlBooleanMismatchVisitor.cs
- OleAutBinder.cs
- ProviderUtil.cs
- SerialStream.cs
- IisTraceListener.cs
- SqlConnectionHelper.cs
- NTAccount.cs
- StylusButtonCollection.cs
- TransferRequestHandler.cs
- TraceHandler.cs
- EntityDataSourceDesignerHelper.cs
- FormatConvertedBitmap.cs
- ASCIIEncoding.cs
- ValidationErrorCollection.cs
- MetaData.cs
- XmlIncludeAttribute.cs
- AspNetSynchronizationContext.cs
- Utils.cs
- Bits.cs
- TextBoxView.cs
- FrameworkTemplate.cs
- CollectionViewGroup.cs
- FrameDimension.cs
- WebServiceHandler.cs
- Point4D.cs
- BuiltInExpr.cs
- GlyphInfoList.cs
- ClientSponsor.cs
- WindowsStreamSecurityBindingElement.cs
- TypeToken.cs
- SqlInternalConnection.cs
- WebPartConnectionsCancelVerb.cs
- AutoSizeComboBox.cs
- BooleanAnimationUsingKeyFrames.cs
- DbProviderManifest.cs
- Tuple.cs
- XmlAggregates.cs
- ListViewItem.cs
- LookupTables.cs
- SimpleWebHandlerParser.cs
- BufferedOutputStream.cs
- WindowsRichEdit.cs
- SqlDependencyUtils.cs
- GPPOINT.cs
- WebEvents.cs
- SQLInt32.cs
- RequestTimeoutManager.cs
- TextEvent.cs
- Maps.cs
- ZipQueryOperator.cs
- AdornerHitTestResult.cs
- IItemProperties.cs
- SubclassTypeValidatorAttribute.cs
- ListSurrogate.cs
- PresentationSource.cs
- hresults.cs
- StreamingContext.cs
- ErrorLog.cs
- XmlSchemaProviderAttribute.cs
- DocumentAutomationPeer.cs
- ClientSession.cs
- DirtyTextRange.cs
- RectangleHotSpot.cs
- PersistenceContext.cs
- ViewGenerator.cs
- Types.cs
- CompilerErrorCollection.cs
- MailHeaderInfo.cs
- DataControlLinkButton.cs
- VScrollProperties.cs
- ToggleButton.cs
- SmiMetaDataProperty.cs
- SecurityTokenInclusionMode.cs
- PostBackTrigger.cs
- ByteAnimationUsingKeyFrames.cs
- ActivityTypeResolver.xaml.cs
- SmtpReplyReaderFactory.cs