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
- TextRangeEditLists.cs
- HttpAsyncResult.cs
- TcpStreams.cs
- XmlDictionaryReader.cs
- SecurityContext.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- TdsParserStateObject.cs
- TouchesCapturedWithinProperty.cs
- ValuePattern.cs
- DrawingAttributes.cs
- BaseParser.cs
- EncodingDataItem.cs
- CharacterShapingProperties.cs
- ConcurrentQueue.cs
- HwndSourceParameters.cs
- isolationinterop.cs
- ConfigurationException.cs
- RemotingAttributes.cs
- AppearanceEditorPart.cs
- ContextMenuService.cs
- OleDbPropertySetGuid.cs
- SynchronizedInputProviderWrapper.cs
- ProcessHost.cs
- Fonts.cs
- HttpFileCollectionWrapper.cs
- CqlLexer.cs
- XmlNamespaceDeclarationsAttribute.cs
- OperatingSystem.cs
- UnsafeNativeMethods.cs
- ContextMenuService.cs
- validationstate.cs
- UnsafeNetInfoNativeMethods.cs
- ObjectSpanRewriter.cs
- ExpressionConverter.cs
- PropertyConverter.cs
- EntityTypeEmitter.cs
- SettingsSavedEventArgs.cs
- ActiveXHost.cs
- DeferredSelectedIndexReference.cs
- oledbmetadatacollectionnames.cs
- XAMLParseException.cs
- WebBrowserHelper.cs
- ExtentKey.cs
- SyndicationContent.cs
- FilterableAttribute.cs
- XmlDesigner.cs
- AttributeUsageAttribute.cs
- SoapReflectionImporter.cs
- UpdateExpressionVisitor.cs
- QueryOptionExpression.cs
- TabItem.cs
- ValuePattern.cs
- ValidatorCollection.cs
- CompiledRegexRunner.cs
- HttpPostedFileBase.cs
- ConfigsHelper.cs
- DrawingGroupDrawingContext.cs
- DefaultProxySection.cs
- PairComparer.cs
- DockPanel.cs
- SecurityTokenParametersEnumerable.cs
- CheckedPointers.cs
- CultureMapper.cs
- ScriptModule.cs
- ModelTreeManager.cs
- SurrogateSelector.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- ListItem.cs
- ToolStripItemEventArgs.cs
- TimeIntervalCollection.cs
- TcpClientChannel.cs
- TextStore.cs
- KeyedQueue.cs
- VisualProxy.cs
- DetailsViewCommandEventArgs.cs
- RightNameExpirationInfoPair.cs
- CharacterMetricsDictionary.cs
- ProcessHostMapPath.cs
- ClipboardProcessor.cs
- BitmapMetadata.cs
- XmlArrayAttribute.cs
- FormParameter.cs
- DataGridViewRowEventArgs.cs
- BroadcastEventHelper.cs
- ShaderEffect.cs
- Decimal.cs
- StreamWriter.cs
- AnnouncementInnerClientCD1.cs
- XmlMapping.cs
- ConnectionManagementSection.cs
- ParserExtension.cs
- XsltException.cs
- Convert.cs
- ServiceDescriptions.cs
- MissingManifestResourceException.cs
- WSSecureConversationFeb2005.cs
- PointHitTestParameters.cs
- DataFormats.cs
- FileSystemEventArgs.cs
- TableItemStyle.cs