Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- COM2Enum.cs
- WizardPanel.cs
- InitializationEventAttribute.cs
- XmlReflectionImporter.cs
- HtmlInputFile.cs
- ClientScriptManagerWrapper.cs
- wgx_render.cs
- XmlSchemaException.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- HtmlValidatorAdapter.cs
- AdministrationHelpers.cs
- GridItemCollection.cs
- TransportDefaults.cs
- CapabilitiesRule.cs
- SByteStorage.cs
- ToolStrip.cs
- WebPartVerbsEventArgs.cs
- AudioBase.cs
- CodeCatchClause.cs
- WeakHashtable.cs
- DesignerUtils.cs
- OdbcDataAdapter.cs
- SimpleMailWebEventProvider.cs
- DCSafeHandle.cs
- ToolTipAutomationPeer.cs
- XpsSerializationManagerAsync.cs
- SelectionManager.cs
- SoapHeader.cs
- KeyValueConfigurationCollection.cs
- PriorityRange.cs
- EventLogPermissionEntryCollection.cs
- WebResourceAttribute.cs
- FileLogRecord.cs
- DoubleStorage.cs
- AstNode.cs
- ProcessManager.cs
- HotSpot.cs
- CultureSpecificCharacterBufferRange.cs
- DataGridRelationshipRow.cs
- DataGridViewCellConverter.cs
- AuthorizationPolicyTypeElement.cs
- SEHException.cs
- BaseTemplateCodeDomTreeGenerator.cs
- ListItemConverter.cs
- StickyNoteAnnotations.cs
- RestClientProxyHandler.cs
- RemotingSurrogateSelector.cs
- PointLightBase.cs
- EventMap.cs
- MaterialCollection.cs
- DesignerActionPropertyItem.cs
- ListViewGroupCollectionEditor.cs
- DBSqlParserTable.cs
- OracleDateTime.cs
- XPathDocumentIterator.cs
- InitializerFacet.cs
- GenerateHelper.cs
- DataReaderContainer.cs
- DocumentViewerAutomationPeer.cs
- SettingsPropertyIsReadOnlyException.cs
- PointAnimation.cs
- DataGridHeaderBorder.cs
- MsmqPoisonMessageException.cs
- KnownColorTable.cs
- CustomErrorCollection.cs
- StylusEventArgs.cs
- ParameterCollection.cs
- DropDownButton.cs
- PeerNameRegistration.cs
- AxWrapperGen.cs
- UIPermission.cs
- Invariant.cs
- BezierSegment.cs
- VisualStyleElement.cs
- _LocalDataStoreMgr.cs
- mactripleDES.cs
- ContentElementAutomationPeer.cs
- GlyphInfoList.cs
- DesignOnlyAttribute.cs
- SecurityVersion.cs
- CompilerState.cs
- CellTreeNodeVisitors.cs
- AutomationPropertyInfo.cs
- BitmapEffect.cs
- NativeMethods.cs
- RoamingStoreFile.cs
- NotifyParentPropertyAttribute.cs
- RuleProcessor.cs
- SoapReflectionImporter.cs
- SettingsAttributeDictionary.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- TransformerConfigurationWizardBase.cs
- RequestCachingSection.cs
- KeyedHashAlgorithm.cs
- CapabilitiesAssignment.cs
- ScalarOps.cs
- RadioButtonList.cs
- InstanceLockQueryResult.cs
- TripleDESCryptoServiceProvider.cs
- HtmlButton.cs