Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EventTrigger.cs
- StylusPointCollection.cs
- InputScopeConverter.cs
- DescendentsWalker.cs
- ActivityXRefPropertyEditor.cs
- StringComparer.cs
- ToolStripOverflow.cs
- AsymmetricKeyExchangeDeformatter.cs
- SurrogateSelector.cs
- UnsafeNativeMethods.cs
- PreviewKeyDownEventArgs.cs
- MethodBuilder.cs
- ping.cs
- ServiceTimeoutsElement.cs
- TableItemProviderWrapper.cs
- TokenBasedSet.cs
- XmlBoundElement.cs
- CellRelation.cs
- ReadOnlyHierarchicalDataSource.cs
- ZoomPercentageConverter.cs
- FixedHighlight.cs
- ExcCanonicalXml.cs
- DataTable.cs
- ExternalDataExchangeService.cs
- ConnectionStringSettingsCollection.cs
- XPathAncestorIterator.cs
- CodeNamespaceImportCollection.cs
- IPHostEntry.cs
- AcceptorSessionSymmetricTransportSecurityProtocol.cs
- SessionEndedEventArgs.cs
- CodeAssignStatement.cs
- Pkcs7Recipient.cs
- FuncCompletionCallbackWrapper.cs
- DbDataRecord.cs
- BaseHashHelper.cs
- ApplicationFileCodeDomTreeGenerator.cs
- LogReservationCollection.cs
- Transform.cs
- WebEventCodes.cs
- XsdDuration.cs
- JsonFormatWriterGenerator.cs
- RegexRunner.cs
- Icon.cs
- EventArgs.cs
- Page.cs
- GlobalProxySelection.cs
- remotingproxy.cs
- DragDrop.cs
- GiveFeedbackEvent.cs
- UdpSocket.cs
- COM2ColorConverter.cs
- validationstate.cs
- SecureEnvironment.cs
- ObjectStateFormatter.cs
- BamlBinaryReader.cs
- SystemBrushes.cs
- PermissionListSet.cs
- Header.cs
- MessageEnumerator.cs
- EnumerableCollectionView.cs
- BuildResult.cs
- SafeNativeMethodsOther.cs
- ContentFilePart.cs
- DocumentOrderQuery.cs
- OneToOneMappingSerializer.cs
- DynamicRendererThreadManager.cs
- HMACSHA384.cs
- ScriptDescriptor.cs
- WindowsTreeView.cs
- EndpointFilterProvider.cs
- WebPartEventArgs.cs
- SubtreeProcessor.cs
- BitmapFrameEncode.cs
- BasicHttpSecurityElement.cs
- TextTreeTextElementNode.cs
- MetadataArtifactLoaderCompositeFile.cs
- ProxyWebPart.cs
- HelloOperation11AsyncResult.cs
- BindStream.cs
- SelectionEditingBehavior.cs
- PropertyEmitterBase.cs
- UInt64Storage.cs
- ResourcePool.cs
- TrustLevelCollection.cs
- DiscreteKeyFrames.cs
- Set.cs
- DataViewSetting.cs
- CategoryList.cs
- CodeGenerator.cs
- EntityDataSource.cs
- DeclarativeExpressionConditionDeclaration.cs
- QilXmlReader.cs
- QuotedPrintableStream.cs
- StickyNoteHelper.cs
- OracleCommandSet.cs
- ChildTable.cs
- DefaultPropertyAttribute.cs
- XmlSecureResolver.cs
- ActiveXHost.cs
- SerializationException.cs