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
- Select.cs
- AuthenticatedStream.cs
- PersistenceTypeAttribute.cs
- CardSpaceSelector.cs
- RelationshipEnd.cs
- ByValueEqualityComparer.cs
- DataColumnSelectionConverter.cs
- RunClient.cs
- XmlSchemaSimpleContentExtension.cs
- XMLUtil.cs
- LineGeometry.cs
- XPathParser.cs
- DataColumnCollection.cs
- DBParameter.cs
- SqlMetaData.cs
- DesignOnlyAttribute.cs
- Italic.cs
- QilSortKey.cs
- SafeMarshalContext.cs
- WebPageTraceListener.cs
- UIElementParagraph.cs
- recordstate.cs
- UserControl.cs
- VectorAnimationUsingKeyFrames.cs
- ExceptionHelpers.cs
- SqlCacheDependency.cs
- PaperSize.cs
- EntityObject.cs
- FormViewPagerRow.cs
- XamlReaderHelper.cs
- MonitorWrapper.cs
- IPAddressCollection.cs
- Helper.cs
- StringFormat.cs
- ExpressionQuoter.cs
- MemberListBinding.cs
- SerializerProvider.cs
- DoubleLink.cs
- TemplateInstanceAttribute.cs
- StylusPointPropertyInfo.cs
- ResourceProviderFactory.cs
- Expressions.cs
- EditorPart.cs
- HttpContext.cs
- XmlNotation.cs
- AuthorizationRule.cs
- WindowsTooltip.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- WindowsAuthenticationModule.cs
- ModelPropertyCollectionImpl.cs
- EditingCommands.cs
- GraphicsState.cs
- ServiceNameCollection.cs
- HttpCapabilitiesBase.cs
- Types.cs
- EntitySqlException.cs
- Vector3DConverter.cs
- FileIOPermission.cs
- GeometryCollection.cs
- CodeTypeMember.cs
- ScriptControlManager.cs
- BevelBitmapEffect.cs
- ServiceModelReg.cs
- RemoteHelper.cs
- AmbientValueAttribute.cs
- DataShape.cs
- SQLResource.cs
- FileRecordSequenceCompletedAsyncResult.cs
- BaseCodePageEncoding.cs
- ExtentKey.cs
- CacheRequest.cs
- OleServicesContext.cs
- ValidatedControlConverter.cs
- CfgSemanticTag.cs
- ReliableOutputSessionChannel.cs
- XmlException.cs
- SpeechUI.cs
- ReadOnlyPermissionSet.cs
- BamlVersionHeader.cs
- SerializableAttribute.cs
- BinaryObjectInfo.cs
- GridViewAutomationPeer.cs
- FixedPosition.cs
- Hashtable.cs
- PersonalizablePropertyEntry.cs
- EmbeddedObject.cs
- ValidatorCompatibilityHelper.cs
- DataGridCheckBoxColumn.cs
- FormClosingEvent.cs
- CharEntityEncoderFallback.cs
- OpenTypeLayout.cs
- CacheVirtualItemsEvent.cs
- HttpCachePolicyElement.cs
- BidOverLoads.cs
- SecurityPolicySection.cs
- UnsafeNativeMethodsMilCoreApi.cs
- FragmentNavigationEventArgs.cs
- ContentWrapperAttribute.cs
- TypefaceCollection.cs
- EntityUtil.cs