Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / DataTableReaderListener.cs / 1305376 / DataTableReaderListener.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace System.Data {
using System;
using System.Data.Common;
using System.Collections;
using System.ComponentModel;
internal sealed class DataTableReaderListener {
private DataTable currentDataTable = null;
private bool isSubscribed = false;
private WeakReference readerWeak;
internal DataTableReaderListener(DataTableReader reader) {
if (reader == null)
throw ExceptionBuilder.ArgumentNull("DataTableReader");
if (currentDataTable != null) {
UnSubscribeEvents();
}
this.readerWeak = new WeakReference(reader);
currentDataTable = reader.CurrentDataTable;
if (currentDataTable != null)
SubscribeEvents();
}
internal void CleanUp() {
UnSubscribeEvents();
}
internal void UpdataTable(DataTable datatable) {
if (datatable == null)
throw ExceptionBuilder.ArgumentNull("DataTable");
UnSubscribeEvents();
currentDataTable = datatable;
SubscribeEvents();
}
private void SubscribeEvents() {
if (currentDataTable == null)
return;
if (isSubscribed)
return;
currentDataTable.Columns.ColumnPropertyChanged += new CollectionChangeEventHandler(SchemaChanged);
currentDataTable.Columns.CollectionChanged += new CollectionChangeEventHandler(SchemaChanged);
currentDataTable.RowChanged += new DataRowChangeEventHandler(DataChanged );
currentDataTable.RowDeleted += new DataRowChangeEventHandler(DataChanged);
currentDataTable.TableCleared += new DataTableClearEventHandler(DataTableCleared);
isSubscribed = true;
}
private void UnSubscribeEvents() {
if (currentDataTable == null)
return;
if (!isSubscribed)
return;
currentDataTable.Columns.ColumnPropertyChanged -= new CollectionChangeEventHandler(SchemaChanged);
currentDataTable.Columns.CollectionChanged -= new CollectionChangeEventHandler(SchemaChanged);
currentDataTable.RowChanged -= new DataRowChangeEventHandler(DataChanged );
currentDataTable.RowDeleted -= new DataRowChangeEventHandler(DataChanged);
currentDataTable.TableCleared -= new DataTableClearEventHandler(DataTableCleared);
isSubscribed = false;
}
private void DataTableCleared(object sender, DataTableClearEventArgs e) {
DataTableReader reader = (DataTableReader) readerWeak.Target;
if (reader != null) {
reader.DataTableCleared();
}
else {
UnSubscribeEvents();
}
}
private void SchemaChanged(object sender, CollectionChangeEventArgs e) {
DataTableReader reader = (DataTableReader) readerWeak.Target;
if (reader != null) {
reader.SchemaChanged();
}
else {
UnSubscribeEvents();
}
}
private void DataChanged( object sender, DataRowChangeEventArgs args ) {
DataTableReader reader = (DataTableReader) readerWeak.Target;
if (reader != null) {
reader.DataChanged(args);
}
else {
UnSubscribeEvents();
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MappingMetadataHelper.cs
- FixedSOMImage.cs
- ScrollChrome.cs
- FrameworkTemplate.cs
- Aes.cs
- Utils.cs
- CryptoStream.cs
- ControlCollection.cs
- UDPClient.cs
- WeakEventManager.cs
- SingleObjectCollection.cs
- SQLByteStorage.cs
- ObjectDataSourceView.cs
- NopReturnReader.cs
- SourceElementsCollection.cs
- Matrix.cs
- ValidateNames.cs
- PasswordPropertyTextAttribute.cs
- DesignerForm.cs
- IdentityValidationException.cs
- ToolStripItemEventArgs.cs
- SafeLibraryHandle.cs
- CodeBinaryOperatorExpression.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- HttpWriter.cs
- PickDesigner.xaml.cs
- Errors.cs
- RadialGradientBrush.cs
- BlockCollection.cs
- BindingList.cs
- ADMembershipProvider.cs
- TimeZone.cs
- Vector.cs
- DataRelationCollection.cs
- WebBrowserEvent.cs
- SmuggledIUnknown.cs
- Form.cs
- SafeHandle.cs
- PageAsyncTaskManager.cs
- PagedDataSource.cs
- ControlPaint.cs
- QilInvokeLateBound.cs
- Serializer.cs
- XsltInput.cs
- HttpHostedTransportConfiguration.cs
- DockPatternIdentifiers.cs
- UdpDiscoveryEndpointElement.cs
- FuncTypeConverter.cs
- MergeLocalizationDirectives.cs
- FrameworkElement.cs
- WeakEventTable.cs
- HttpConfigurationContext.cs
- ScrollProperties.cs
- SubMenuStyle.cs
- SqlServer2KCompatibilityAnnotation.cs
- UmAlQuraCalendar.cs
- IODescriptionAttribute.cs
- WpfXamlMember.cs
- WsatConfiguration.cs
- GenericTypeParameterBuilder.cs
- CompositeControlDesigner.cs
- ListItem.cs
- BitmapMetadataEnumerator.cs
- IODescriptionAttribute.cs
- OleCmdHelper.cs
- EntityType.cs
- EntityContainerEmitter.cs
- BindingCollection.cs
- NullReferenceException.cs
- MouseCaptureWithinProperty.cs
- DesignerVerb.cs
- SqlDataSourceCustomCommandEditor.cs
- ExpressionTable.cs
- CommandSet.cs
- ToggleButtonAutomationPeer.cs
- PropertyConverter.cs
- HtmlWindow.cs
- RecognizedWordUnit.cs
- BaseTreeIterator.cs
- VBIdentifierNameEditor.cs
- Pool.cs
- BinHexEncoder.cs
- SingleObjectCollection.cs
- _NegotiateClient.cs
- TokenizerHelper.cs
- CodeAttributeDeclarationCollection.cs
- SchemaManager.cs
- DBAsyncResult.cs
- ZipIOLocalFileHeader.cs
- LinearKeyFrames.cs
- BaseCollection.cs
- AutomationPropertyInfo.cs
- TableProviderWrapper.cs
- HttpConfigurationSystem.cs
- TreeNodeBindingCollection.cs
- WindowVisualStateTracker.cs
- ImageSource.cs
- CollectionViewSource.cs
- MenuEventArgs.cs
- CodeMemberMethod.cs