Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- ReadOnlyCollection.cs
- DataRowChangeEvent.cs
- BrowserCapabilitiesFactoryBase.cs
- ActivityTypeDesigner.xaml.cs
- SessionIDManager.cs
- TransactionFlowBindingElementImporter.cs
- Array.cs
- Transactions.cs
- DataControlButton.cs
- FillBehavior.cs
- StickyNoteAnnotations.cs
- ProfileBuildProvider.cs
- ClientRolePrincipal.cs
- FileEnumerator.cs
- TreeViewItemAutomationPeer.cs
- HtmlHead.cs
- TreeViewItemAutomationPeer.cs
- ChildDocumentBlock.cs
- BindingValueChangedEventArgs.cs
- Configuration.cs
- SafeNativeMethods.cs
- UnSafeCharBuffer.cs
- AttributeCollection.cs
- DocumentProperties.cs
- MetafileHeaderWmf.cs
- Vector3DValueSerializer.cs
- SafeCryptoHandles.cs
- TargetPerspective.cs
- BamlResourceSerializer.cs
- _Semaphore.cs
- IIS7WorkerRequest.cs
- GraphicsState.cs
- XmlSchemaObjectTable.cs
- NavigationWindowAutomationPeer.cs
- TextViewBase.cs
- FontClient.cs
- Help.cs
- DeclarativeCatalogPart.cs
- SecurityPermission.cs
- ArcSegment.cs
- PermissionSetEnumerator.cs
- TopClause.cs
- KeyValueInternalCollection.cs
- ToolStripScrollButton.cs
- DataServiceHostWrapper.cs
- XPathNode.cs
- DynamicILGenerator.cs
- TogglePattern.cs
- RuleElement.cs
- EntityKey.cs
- QueryOutputWriter.cs
- DbgCompiler.cs
- Accessible.cs
- METAHEADER.cs
- BindingCollection.cs
- ButtonColumn.cs
- FileDialog_Vista.cs
- BitmapImage.cs
- Button.cs
- SqlNotificationEventArgs.cs
- GorillaCodec.cs
- SplineKeyFrames.cs
- Comparer.cs
- AmbientLight.cs
- FlowDocumentPage.cs
- MarginCollapsingState.cs
- HttpCookieCollection.cs
- LinkClickEvent.cs
- LocalizationComments.cs
- TcpTransportElement.cs
- RequiredFieldValidator.cs
- JobDuplex.cs
- DataGridViewComboBoxEditingControl.cs
- SQLConvert.cs
- ClassicBorderDecorator.cs
- MDIWindowDialog.cs
- UnsafeNativeMethodsMilCoreApi.cs
- WsdlContractConversionContext.cs
- AsyncResult.cs
- NamespaceCollection.cs
- AsymmetricKeyExchangeFormatter.cs
- PackWebRequestFactory.cs
- ToolStripButton.cs
- RecordConverter.cs
- HttpAsyncResult.cs
- BitmapFrameDecode.cs
- ReachPrintTicketSerializerAsync.cs
- PrintDialog.cs
- BamlReader.cs
- ADRole.cs
- Fx.cs
- BreakRecordTable.cs
- SizeKeyFrameCollection.cs
- ToolStripPanelCell.cs
- RelatedImageListAttribute.cs
- IItemProperties.cs
- InheritanceContextHelper.cs
- PriorityRange.cs
- DynamicEndpointElement.cs
- DataGridTableCollection.cs