Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- translator.cs
- XmlWrappingWriter.cs
- UnionCqlBlock.cs
- PriorityBindingExpression.cs
- UserControlCodeDomTreeGenerator.cs
- DataGridViewDataConnection.cs
- SqlNodeAnnotations.cs
- XPathNavigatorException.cs
- _AutoWebProxyScriptEngine.cs
- MembershipSection.cs
- AddValidationError.cs
- ConfigurationStrings.cs
- DesignTimeVisibleAttribute.cs
- DiscoveryClientRequestChannel.cs
- RegexCharClass.cs
- GB18030Encoding.cs
- ConfigurationElementProperty.cs
- ServiceOperationListItem.cs
- ValueQuery.cs
- MethodAccessException.cs
- CommandLibraryHelper.cs
- TraceSource.cs
- ProtocolsInstallComponent.cs
- IndependentlyAnimatedPropertyMetadata.cs
- LinearKeyFrames.cs
- ListViewCancelEventArgs.cs
- WebPartAuthorizationEventArgs.cs
- ContractType.cs
- ActivityCodeDomSerializer.cs
- LinqDataSourceDeleteEventArgs.cs
- ConfigXmlSignificantWhitespace.cs
- SqlInternalConnectionTds.cs
- SystemThemeKey.cs
- SizeChangedInfo.cs
- WaitHandleCannotBeOpenedException.cs
- HyperLinkStyle.cs
- VerificationAttribute.cs
- ImageMap.cs
- DataSourceViewSchemaConverter.cs
- SerializationFieldInfo.cs
- QilVisitor.cs
- DataGridViewComboBoxColumn.cs
- Context.cs
- PropertyToken.cs
- DataGridDesigner.cs
- ListViewSelectEventArgs.cs
- OleDbConnection.cs
- HtmlInputFile.cs
- ObjectConverter.cs
- FileIOPermission.cs
- TextTabProperties.cs
- FixedSOMLineRanges.cs
- DataObjectAttribute.cs
- filewebrequest.cs
- SqlMethods.cs
- StaticExtension.cs
- BaseCollection.cs
- DocumentViewerBase.cs
- TextEffect.cs
- UriTemplateVariableQueryValue.cs
- RegexCaptureCollection.cs
- WebBrowserNavigatedEventHandler.cs
- SafeNativeMethods.cs
- RewritingSimplifier.cs
- ProfileServiceManager.cs
- PropertyTab.cs
- Run.cs
- InvalidAsynchronousStateException.cs
- SettingsSavedEventArgs.cs
- DataGridViewRowStateChangedEventArgs.cs
- assertwrapper.cs
- CfgParser.cs
- HttpCachePolicyElement.cs
- RepeatInfo.cs
- PrintDialog.cs
- PrintPreviewGraphics.cs
- RegisteredHiddenField.cs
- StorageBasedPackageProperties.cs
- DictationGrammar.cs
- TextTreeText.cs
- ListViewGroupConverter.cs
- RemoteX509Token.cs
- DateTimeOffset.cs
- PathGeometry.cs
- QilCloneVisitor.cs
- ButtonBaseAdapter.cs
- RemoteWebConfigurationHost.cs
- ScopeElement.cs
- DotAtomReader.cs
- LinqDataSourceContextEventArgs.cs
- SamlAuthenticationClaimResource.cs
- PrintPageEvent.cs
- ArrayWithOffset.cs
- ActiveDesignSurfaceEvent.cs
- TabPage.cs
- Permission.cs
- ArglessEventHandlerProxy.cs
- WizardStepCollectionEditor.cs
- ToolBarTray.cs
- SystemWebCachingSectionGroup.cs