Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Data / System / Data / DataTableReaderListener.cs / 1 / 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
- InstalledVoice.cs
- ToolStripStatusLabel.cs
- ColumnReorderedEventArgs.cs
- OracleRowUpdatingEventArgs.cs
- DebugInfoExpression.cs
- AppDomainAttributes.cs
- XdrBuilder.cs
- NotificationContext.cs
- ListSurrogate.cs
- PhysicalAddress.cs
- BasicHttpMessageSecurityElement.cs
- XmlUtil.cs
- XmlProcessingInstruction.cs
- DSASignatureDeformatter.cs
- AutomationTextAttribute.cs
- AxisAngleRotation3D.cs
- ACE.cs
- DefaultDiscoveryService.cs
- ValueUnavailableException.cs
- InProcStateClientManager.cs
- ChangeBlockUndoRecord.cs
- SafeNativeMethods.cs
- Size3D.cs
- AddInDeploymentState.cs
- CompatibleComparer.cs
- PrivateFontCollection.cs
- DeclarationUpdate.cs
- RetrieveVirtualItemEventArgs.cs
- StylusPointDescription.cs
- Classification.cs
- SystemSounds.cs
- FileLogRecordHeader.cs
- WrappedReader.cs
- BaseComponentEditor.cs
- WaitHandle.cs
- DeviceFilterDictionary.cs
- GlyphShapingProperties.cs
- PrefixQName.cs
- Cursor.cs
- DataMemberConverter.cs
- TextWriter.cs
- GraphicsContainer.cs
- SqlNodeAnnotations.cs
- SafeRegistryHandle.cs
- XmlSchemaValidator.cs
- PageStatePersister.cs
- DocumentOrderQuery.cs
- BaseResourcesBuildProvider.cs
- HttpContextServiceHost.cs
- ManagementQuery.cs
- ResourceProperty.cs
- DbConnectionHelper.cs
- Events.cs
- InternalConfigSettingsFactory.cs
- XmlQueryType.cs
- InputLanguageSource.cs
- SwitchAttribute.cs
- CmsUtils.cs
- TextHidden.cs
- DivideByZeroException.cs
- SerialStream.cs
- Oci.cs
- odbcmetadatacollectionnames.cs
- HandlerBase.cs
- DesignerTextViewAdapter.cs
- CompiledRegexRunner.cs
- DesignTimeVisibleAttribute.cs
- FixedStringLookup.cs
- control.ime.cs
- Point3DIndependentAnimationStorage.cs
- FixUpCollection.cs
- InvalidDataException.cs
- WindowsMenu.cs
- UpdateProgress.cs
- HtmlElement.cs
- TimeZoneNotFoundException.cs
- DriveNotFoundException.cs
- ToolStripDropDownButton.cs
- SrgsText.cs
- CodeTypeDelegate.cs
- CacheRequest.cs
- WebExceptionStatus.cs
- WebPartAddingEventArgs.cs
- RectangleConverter.cs
- BypassElement.cs
- _AutoWebProxyScriptWrapper.cs
- StringFreezingAttribute.cs
- MimeParameters.cs
- DataGridViewColumnCollectionEditor.cs
- FigureHelper.cs
- EndpointIdentityExtension.cs
- RectangleGeometry.cs
- PolyQuadraticBezierSegment.cs
- CellLabel.cs
- DeploymentSection.cs
- SchemaNames.cs
- CodeDirectoryCompiler.cs
- UInt16Converter.cs
- ProjectionPruner.cs
- ListViewUpdateEventArgs.cs