Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- HttpCachePolicyBase.cs
- DomainConstraint.cs
- WebPartDescriptionCollection.cs
- UnsafeNetInfoNativeMethods.cs
- MultiPageTextView.cs
- CodeGenerator.cs
- EDesignUtil.cs
- CommandConverter.cs
- ClientRoleProvider.cs
- EventListenerClientSide.cs
- GrammarBuilderBase.cs
- RadioButton.cs
- DataConnectionHelper.cs
- TextParagraph.cs
- ImageMap.cs
- safex509handles.cs
- FlowDocumentPageViewerAutomationPeer.cs
- DynamicMethod.cs
- ZoneIdentityPermission.cs
- Listbox.cs
- AttachedPropertyMethodSelector.cs
- FormatterServices.cs
- PerfCounters.cs
- ObsoleteAttribute.cs
- Interlocked.cs
- AesManaged.cs
- BitStack.cs
- RetriableClipboard.cs
- ContractListAdapter.cs
- EnvelopedPkcs7.cs
- CapabilitiesUse.cs
- Thread.cs
- ObjectDataSource.cs
- NotifyIcon.cs
- Helper.cs
- CollectionsUtil.cs
- SamlAuthorityBinding.cs
- MetadataArtifactLoaderResource.cs
- EditorReuseAttribute.cs
- FamilyMap.cs
- VariantWrapper.cs
- UIInitializationException.cs
- QilXmlWriter.cs
- FixedSOMElement.cs
- dataSvcMapFileLoader.cs
- HostingEnvironmentException.cs
- ToolStripContainer.cs
- UrlMappingsModule.cs
- BinaryReader.cs
- SatelliteContractVersionAttribute.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- Registry.cs
- typedescriptorpermission.cs
- Speller.cs
- FontFamilyConverter.cs
- ReaderWriterLockSlim.cs
- XNodeNavigator.cs
- HGlobalSafeHandle.cs
- UserControlBuildProvider.cs
- Page.cs
- HostSecurityManager.cs
- keycontainerpermission.cs
- HostSecurityManager.cs
- Parser.cs
- FontFamilyConverter.cs
- DirectoryNotFoundException.cs
- ArgIterator.cs
- ItemCheckEvent.cs
- CodeObject.cs
- ToolStripGripRenderEventArgs.cs
- Query.cs
- TreeSet.cs
- StylusButtonEventArgs.cs
- mongolianshape.cs
- VersionConverter.cs
- MonthChangedEventArgs.cs
- TextServicesHost.cs
- CryptoStream.cs
- StateDesignerConnector.cs
- DependsOnAttribute.cs
- SmiEventStream.cs
- WindowsFormsDesignerOptionService.cs
- DataGridViewAutoSizeModeEventArgs.cs
- ScopedKnownTypes.cs
- TreeNodeClickEventArgs.cs
- PowerModeChangedEventArgs.cs
- SafeTimerHandle.cs
- NegationPusher.cs
- DynamicMetaObjectBinder.cs
- NotificationContext.cs
- MaterializeFromAtom.cs
- HierarchicalDataSourceControl.cs
- BitmapFrame.cs
- X500Name.cs
- OuterGlowBitmapEffect.cs
- SiteMapDesignerDataSourceView.cs
- EnterpriseServicesHelper.cs
- PasswordDeriveBytes.cs
- ElementAction.cs
- HtmlControlPersistable.cs