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
- DurableDispatcherAddressingFault.cs
- ExtenderProvidedPropertyAttribute.cs
- CanonicalFontFamilyReference.cs
- SiteMapNodeCollection.cs
- RowToFieldTransformer.cs
- CategoryEditor.cs
- SourceElementsCollection.cs
- RegisteredArrayDeclaration.cs
- TaskFormBase.cs
- FormatSettings.cs
- AndCondition.cs
- DocumentOrderQuery.cs
- DescriptionAttribute.cs
- XpsFont.cs
- SiteMapPath.cs
- XslNumber.cs
- ListMarkerLine.cs
- MessageFilterException.cs
- ComplexBindingPropertiesAttribute.cs
- LinqDataSourceValidationException.cs
- FixedSchema.cs
- X509Certificate.cs
- InvalidOperationException.cs
- altserialization.cs
- FreezableCollection.cs
- Line.cs
- PropertyMapper.cs
- TableLayout.cs
- HtmlGenericControl.cs
- AsyncStreamReader.cs
- ConfigurationSectionGroupCollection.cs
- LicenseException.cs
- ListBase.cs
- ClientApiGenerator.cs
- ChineseLunisolarCalendar.cs
- HideDisabledControlAdapter.cs
- WebPartUserCapability.cs
- OdbcCommand.cs
- BmpBitmapDecoder.cs
- ECDsa.cs
- DbConnectionPoolGroupProviderInfo.cs
- SurrogateDataContract.cs
- PropertyEmitterBase.cs
- CompositeDesignerAccessibleObject.cs
- Int32RectConverter.cs
- XmlFormatWriterGenerator.cs
- DataGridViewCellCancelEventArgs.cs
- DetailsViewUpdateEventArgs.cs
- GeometryConverter.cs
- DataObjectCopyingEventArgs.cs
- CodeFieldReferenceExpression.cs
- ICollection.cs
- PreviewPageInfo.cs
- FontEmbeddingManager.cs
- FormsAuthenticationConfiguration.cs
- QuaternionIndependentAnimationStorage.cs
- CountAggregationOperator.cs
- MsmqIntegrationSecurityMode.cs
- FormatterServices.cs
- CodePageUtils.cs
- TextDecorationCollection.cs
- DbConnectionPoolIdentity.cs
- MultipleViewProviderWrapper.cs
- SettingsProperty.cs
- DynamicValidatorEventArgs.cs
- ChtmlTextBoxAdapter.cs
- ContextStack.cs
- XmlEntity.cs
- IntPtr.cs
- SamlAssertionKeyIdentifierClause.cs
- ObjectParameter.cs
- UnaryExpressionHelper.cs
- Transform3DGroup.cs
- BamlRecordReader.cs
- SerialErrors.cs
- HttpCacheVary.cs
- TreeNodeEventArgs.cs
- EDesignUtil.cs
- ComplexTypeEmitter.cs
- DateRangeEvent.cs
- PointF.cs
- TitleStyle.cs
- WebReferencesBuildProvider.cs
- _WinHttpWebProxyDataBuilder.cs
- RIPEMD160.cs
- ContourSegment.cs
- followingsibling.cs
- ToolStripSettings.cs
- NativeMethods.cs
- CallbackWrapper.cs
- CacheRequest.cs
- ComponentEditorPage.cs
- XmlUrlResolver.cs
- DecoderFallbackWithFailureFlag.cs
- precedingsibling.cs
- Vector3dCollection.cs
- CodeRemoveEventStatement.cs
- SmtpNegotiateAuthenticationModule.cs
- SQLDoubleStorage.cs
- CustomAttributeBuilder.cs