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
- XamlTreeBuilder.cs
- HtmlFormParameterReader.cs
- Decoder.cs
- SectionInput.cs
- SchemeSettingElement.cs
- OciLobLocator.cs
- MappableObjectManager.cs
- BeginStoryboard.cs
- RegexCharClass.cs
- SwitchLevelAttribute.cs
- RemotingAttributes.cs
- Pointer.cs
- MsmqIntegrationReceiveParameters.cs
- Int16.cs
- ToolStripHighContrastRenderer.cs
- CertificateManager.cs
- ListControl.cs
- ToolboxBitmapAttribute.cs
- DataControlReference.cs
- ReceiveActivityValidator.cs
- XpsFixedPageReaderWriter.cs
- SqlDataAdapter.cs
- LeftCellWrapper.cs
- RedistVersionInfo.cs
- CmsInterop.cs
- XmlSchemas.cs
- ADMembershipProvider.cs
- StorageEndPropertyMapping.cs
- SqlParameterCollection.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- Decorator.cs
- PseudoWebRequest.cs
- SocketAddress.cs
- AttachInfo.cs
- MethodAccessException.cs
- PeerCredential.cs
- MobileControlsSectionHelper.cs
- BitmapFrameEncode.cs
- Transform3D.cs
- DataGridTextBox.cs
- DeferredElementTreeState.cs
- GuidConverter.cs
- ValidatorUtils.cs
- DependencyObject.cs
- GlyphShapingProperties.cs
- RegistryConfigurationProvider.cs
- SqlIdentifier.cs
- SymLanguageVendor.cs
- QilSortKey.cs
- DataBindEngine.cs
- SiteMap.cs
- AdornerLayer.cs
- DataGridViewLinkColumn.cs
- DataTablePropertyDescriptor.cs
- ChannelBinding.cs
- InplaceBitmapMetadataWriter.cs
- AsyncDataRequest.cs
- PageBuildProvider.cs
- Exceptions.cs
- XPathDocumentIterator.cs
- FieldNameLookup.cs
- CodeValidator.cs
- LockedHandleGlyph.cs
- SessionState.cs
- XPathAncestorQuery.cs
- IssuanceLicense.cs
- ListChangedEventArgs.cs
- TypeElement.cs
- DoubleLinkList.cs
- OLEDB_Util.cs
- httpserverutility.cs
- ExtensionWindowResizeGrip.cs
- DbConnectionPoolCounters.cs
- LayoutEvent.cs
- SecurityUniqueId.cs
- GridViewHeaderRowPresenter.cs
- CodeComment.cs
- MouseGesture.cs
- SplineQuaternionKeyFrame.cs
- ExportOptions.cs
- ComponentEditorPage.cs
- MemoryFailPoint.cs
- Renderer.cs
- TemplateNameScope.cs
- ExtensionQuery.cs
- Brush.cs
- ShapingWorkspace.cs
- NameValueConfigurationElement.cs
- Properties.cs
- MessageSecurityException.cs
- VisualProxy.cs
- MatrixCamera.cs
- TypeBuilderInstantiation.cs
- LinqDataSourceDeleteEventArgs.cs
- TemplatedMailWebEventProvider.cs
- _NegoStream.cs
- DependencyPropertyKey.cs
- SqlSupersetValidator.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- StringOutput.cs