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
- TableRowGroup.cs
- HwndProxyElementProvider.cs
- PropertyDescriptorComparer.cs
- TabRenderer.cs
- ConditionValidator.cs
- AstNode.cs
- FileIOPermission.cs
- DbConnectionStringCommon.cs
- FileDataSourceCache.cs
- DbSetClause.cs
- RSAPKCS1SignatureFormatter.cs
- ErrorFormatterPage.cs
- DeclaredTypeValidatorAttribute.cs
- ComponentChangedEvent.cs
- Font.cs
- EdmEntityTypeAttribute.cs
- IIS7WorkerRequest.cs
- Dictionary.cs
- PenContext.cs
- MaterialGroup.cs
- AspNetSynchronizationContext.cs
- MSAAWinEventWrap.cs
- UpdatePanelTrigger.cs
- DeleteCardRequest.cs
- RenameRuleObjectDialog.cs
- ArraySortHelper.cs
- DataSpaceManager.cs
- BindableTemplateBuilder.cs
- X509Certificate.cs
- FormViewInsertEventArgs.cs
- MemberDomainMap.cs
- ManualResetEventSlim.cs
- OdbcException.cs
- CodeTypeReferenceCollection.cs
- ExpandedWrapper.cs
- EndCreateSecurityTokenRequest.cs
- TransformConverter.cs
- BooleanKeyFrameCollection.cs
- TrackingLocationCollection.cs
- DoubleLinkList.cs
- SetterBaseCollection.cs
- CalendarDataBindingHandler.cs
- TreeBuilderXamlTranslator.cs
- ConfigXmlComment.cs
- XmlSignificantWhitespace.cs
- ObjectDataSourceEventArgs.cs
- ParenthesizePropertyNameAttribute.cs
- WebPartDescription.cs
- RoutedUICommand.cs
- Compilation.cs
- ProcessRequestArgs.cs
- InitializationEventAttribute.cs
- DiscoveryMessageSequenceGenerator.cs
- SecurityManager.cs
- XmlDataDocument.cs
- LiteralLink.cs
- StretchValidation.cs
- UIHelper.cs
- TryLoadRunnableWorkflowCommand.cs
- DateTimeOffset.cs
- XmlILStorageConverter.cs
- HwndStylusInputProvider.cs
- XsdCachingReader.cs
- PrinterResolution.cs
- Vector3DAnimation.cs
- SqlDataSourceConfigureFilterForm.cs
- XPathSingletonIterator.cs
- WpfWebRequestHelper.cs
- WinFormsSpinner.cs
- PermissionToken.cs
- ErrorStyle.cs
- WaitForChangedResult.cs
- ValueChangedEventManager.cs
- InputChannelAcceptor.cs
- ProxyFragment.cs
- AuthorizationRuleCollection.cs
- EntryIndex.cs
- TrustLevelCollection.cs
- AspProxy.cs
- ComponentChangedEvent.cs
- Executor.cs
- PreviewPageInfo.cs
- StrongNameMembershipCondition.cs
- MergeExecutor.cs
- RemotingException.cs
- DbQueryCommandTree.cs
- SerializableAttribute.cs
- GenericsInstances.cs
- webeventbuffer.cs
- LogWriteRestartAreaAsyncResult.cs
- LinqDataSourceHelper.cs
- BulletedListEventArgs.cs
- UIntPtr.cs
- MatrixCamera.cs
- DataGridViewColumnConverter.cs
- RegexCaptureCollection.cs
- SyndicationSerializer.cs
- XmlChildEnumerator.cs
- MultiTouchSystemGestureLogic.cs
- AdjustableArrowCap.cs