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
- CodeDirectiveCollection.cs
- StringBlob.cs
- GeometryValueSerializer.cs
- CompilerResults.cs
- QueryableFilterUserControl.cs
- RelatedCurrencyManager.cs
- WebPartCloseVerb.cs
- TextServicesCompartmentContext.cs
- UITypeEditor.cs
- DocumentPageViewAutomationPeer.cs
- SoapReflectionImporter.cs
- TypefaceMap.cs
- AffineTransform3D.cs
- TransformConverter.cs
- KeyedCollection.cs
- SqlCacheDependency.cs
- BitmapEffectGroup.cs
- SpellerError.cs
- ColorTransformHelper.cs
- BooleanExpr.cs
- ReturnType.cs
- MultipleViewProviderWrapper.cs
- ConstructorBuilder.cs
- QueryPageSettingsEventArgs.cs
- TypeNameConverter.cs
- ISO2022Encoding.cs
- TextEditorDragDrop.cs
- UdpDiscoveryMessageFilter.cs
- XmlReaderSettings.cs
- EventLogPermissionAttribute.cs
- WindowsFormsHelpers.cs
- WinEventTracker.cs
- FixedSOMSemanticBox.cs
- ValidationSummary.cs
- DataGridViewEditingControlShowingEventArgs.cs
- MenuBase.cs
- Compiler.cs
- ProxyAttribute.cs
- TreeViewItemAutomationPeer.cs
- ColorMatrix.cs
- XmlSchemaInclude.cs
- GenericWebPart.cs
- SafeArchiveContext.cs
- Label.cs
- DependencyPropertyConverter.cs
- TextEditorParagraphs.cs
- ContentElement.cs
- CodeDirectoryCompiler.cs
- UriExt.cs
- TextServicesHost.cs
- GeneralTransform2DTo3DTo2D.cs
- QuaternionConverter.cs
- TextureBrush.cs
- XmlSchemaSet.cs
- ExtenderProvidedPropertyAttribute.cs
- FileLoadException.cs
- DataGridItem.cs
- Int64Storage.cs
- LoginView.cs
- HtmlListAdapter.cs
- ListBox.cs
- CompilationLock.cs
- DesignerSerializationVisibilityAttribute.cs
- BitmapPalette.cs
- FormsAuthenticationUser.cs
- ByteStreamGeometryContext.cs
- XmlSchemaAttributeGroup.cs
- SrgsDocumentParser.cs
- BamlRecordReader.cs
- PackWebRequestFactory.cs
- Columns.cs
- UnsafeNativeMethods.cs
- NativeWindow.cs
- KeyConstraint.cs
- DecoderFallback.cs
- InstanceDataCollectionCollection.cs
- HttpListenerRequest.cs
- SystemException.cs
- ColumnWidthChangingEvent.cs
- PriorityChain.cs
- TextRenderingModeValidation.cs
- CharacterMetrics.cs
- RemotingHelper.cs
- MdImport.cs
- ListViewItemSelectionChangedEvent.cs
- JumpPath.cs
- XPathNodeList.cs
- ServiceNameCollection.cs
- LinqDataSourceHelper.cs
- MultipartContentParser.cs
- DataControlLinkButton.cs
- UniformGrid.cs
- CertificateManager.cs
- PartitionerQueryOperator.cs
- Simplifier.cs
- HttpHandlerAction.cs
- activationcontext.cs
- remotingproxy.cs
- HelpOperationInvoker.cs
- HighlightOverlayGlyph.cs