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
- HttpRawResponse.cs
- ConfigurationProviderException.cs
- DataServiceQueryOfT.cs
- CompiledRegexRunnerFactory.cs
- Calendar.cs
- WebPartCollection.cs
- TdsParserStaticMethods.cs
- ArraySegment.cs
- AliasedSlot.cs
- InputProviderSite.cs
- ButtonPopupAdapter.cs
- FormsAuthenticationCredentials.cs
- TypeDelegator.cs
- BufferedGraphicsManager.cs
- ParameterElementCollection.cs
- FileRecordSequence.cs
- PrintDialog.cs
- EdmValidator.cs
- QilInvokeLateBound.cs
- DiscardableAttribute.cs
- ScriptMethodAttribute.cs
- FixedElement.cs
- ScrollPattern.cs
- XmlSchemaElement.cs
- ErrorStyle.cs
- WebPartRestoreVerb.cs
- XmlSchemaExternal.cs
- KeyedHashAlgorithm.cs
- MessageAction.cs
- SpoolingTask.cs
- SrgsRuleRef.cs
- newinstructionaction.cs
- GeometryHitTestParameters.cs
- DataGridViewRowsRemovedEventArgs.cs
- _BaseOverlappedAsyncResult.cs
- MissingManifestResourceException.cs
- BitmapEffectInput.cs
- CqlQuery.cs
- SqlDataSourceRefreshSchemaForm.cs
- StringSource.cs
- arc.cs
- TimelineGroup.cs
- DesignBindingEditor.cs
- EntityDataSourceQueryBuilder.cs
- DetailsViewPagerRow.cs
- LoaderAllocator.cs
- RtType.cs
- JsonFormatGeneratorStatics.cs
- HttpClientCertificate.cs
- TableLayoutCellPaintEventArgs.cs
- ShutDownListener.cs
- TextRangeEditTables.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- HttpResponseInternalWrapper.cs
- DataGridViewCellCollection.cs
- DataGridColumnCollection.cs
- DataBinder.cs
- AxHostDesigner.cs
- Selection.cs
- FontDifferentiator.cs
- BookmarkScopeInfo.cs
- TransactionFlowBindingElement.cs
- EventDescriptorCollection.cs
- LocalFileSettingsProvider.cs
- SecurityKeyEntropyMode.cs
- ServiceReference.cs
- CodeGen.cs
- UriScheme.cs
- SQLGuidStorage.cs
- SearchForVirtualItemEventArgs.cs
- QilFunction.cs
- xamlnodes.cs
- ResourceExpressionBuilder.cs
- SafeRightsManagementPubHandle.cs
- UserControlBuildProvider.cs
- Vector3dCollection.cs
- UInt16Converter.cs
- CommandPlan.cs
- NullExtension.cs
- TdsParserSafeHandles.cs
- StyleBamlTreeBuilder.cs
- ParenExpr.cs
- CacheAxisQuery.cs
- Adorner.cs
- Label.cs
- UserPersonalizationStateInfo.cs
- WeakReference.cs
- SqlTriggerAttribute.cs
- WorkflowClientDeliverMessageWrapper.cs
- HtmlMobileTextWriter.cs
- DataTableClearEvent.cs
- DictionarySectionHandler.cs
- PasswordBoxAutomationPeer.cs
- CodeArrayIndexerExpression.cs
- SystemColorTracker.cs
- CompilerTypeWithParams.cs
- SemanticResultKey.cs
- ConnectionPoint.cs
- ConfigurationSection.cs
- TableLayoutRowStyleCollection.cs