Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ //// 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
- CompiledQuery.cs
- SpanIndex.cs
- DesignerActionListCollection.cs
- WebBrowserProgressChangedEventHandler.cs
- FormsAuthenticationUser.cs
- ContextMarshalException.cs
- GlobalAllocSafeHandle.cs
- ClipboardProcessor.cs
- PowerModeChangedEventArgs.cs
- EventMappingSettingsCollection.cs
- InstallerTypeAttribute.cs
- Tuple.cs
- login.cs
- XmlArrayAttribute.cs
- MapPathBasedVirtualPathProvider.cs
- ObjectTag.cs
- SynchronizedInputHelper.cs
- OleDbSchemaGuid.cs
- ChannelManagerBase.cs
- Control.cs
- GridViewRow.cs
- DesignerAttribute.cs
- HtmlTableRowCollection.cs
- StoryFragments.cs
- ColumnResizeUndoUnit.cs
- util.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- MenuItemStyle.cs
- EventProxy.cs
- SettingsAttributeDictionary.cs
- Model3DGroup.cs
- WebContext.cs
- DataGridViewRowEventArgs.cs
- TraceProvider.cs
- Light.cs
- ArgumentsParser.cs
- dataobject.cs
- WebPartMenu.cs
- ExpandedWrapper.cs
- LinkedResource.cs
- RelationshipDetailsRow.cs
- SHA384Managed.cs
- ConfigurationValue.cs
- CodeGenerationManager.cs
- EncoderParameters.cs
- safesecurityhelperavalon.cs
- EventMap.cs
- DrawingContextFlattener.cs
- ColumnResizeUndoUnit.cs
- UnionQueryOperator.cs
- SqlDataSourceCache.cs
- CardSpaceSelector.cs
- EventsTab.cs
- PerformanceCounterLib.cs
- StrokeRenderer.cs
- DataControlLinkButton.cs
- WebServiceData.cs
- SingleStorage.cs
- BookmarkCallbackWrapper.cs
- BrowserCapabilitiesFactory.cs
- BamlBinaryReader.cs
- BasicExpandProvider.cs
- TextRangeSerialization.cs
- XmlCharCheckingReader.cs
- ClientFormsIdentity.cs
- HeaderCollection.cs
- MethodInfo.cs
- VirtualizingPanel.cs
- InputReportEventArgs.cs
- AbandonedMutexException.cs
- FloaterParaClient.cs
- DrawItemEvent.cs
- SqlServices.cs
- CommandDevice.cs
- Enum.cs
- activationcontext.cs
- ImportCatalogPart.cs
- UTF32Encoding.cs
- DataGridViewDataErrorEventArgs.cs
- linebase.cs
- EmptyCollection.cs
- NumberAction.cs
- CapabilitiesState.cs
- UdpConstants.cs
- AsymmetricSignatureDeformatter.cs
- GlyphRun.cs
- EntityConnection.cs
- EntitySetRetriever.cs
- Exceptions.cs
- AsyncPostBackErrorEventArgs.cs
- GridView.cs
- MD5.cs
- EmbeddedObject.cs
- MouseButtonEventArgs.cs
- DocumentAutomationPeer.cs
- DiscoveryService.cs
- DataGridCommandEventArgs.cs
- SqlProviderServices.cs
- ToolStripRendererSwitcher.cs
- DiffuseMaterial.cs