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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ItemAutomationPeer.cs
- SqlTypesSchemaImporter.cs
- PerformanceCounter.cs
- TypeInfo.cs
- SiblingIterators.cs
- VectorAnimationUsingKeyFrames.cs
- State.cs
- TraceInternal.cs
- BStrWrapper.cs
- MsmqIntegrationChannelListener.cs
- HttpException.cs
- HttpListenerRequest.cs
- SigningCredentials.cs
- TextParagraphProperties.cs
- TimerTable.cs
- SharedStatics.cs
- AxisAngleRotation3D.cs
- RoleBoolean.cs
- SchemaImporterExtensionElementCollection.cs
- GridViewDeletedEventArgs.cs
- DynamicField.cs
- Converter.cs
- RotateTransform3D.cs
- TabItemWrapperAutomationPeer.cs
- XmlSchemaAnyAttribute.cs
- EnterpriseServicesHelper.cs
- OpenFileDialog.cs
- SwitchElementsCollection.cs
- SqlDataReaderSmi.cs
- ContractTypeNameCollection.cs
- ItemCheckEvent.cs
- HandlerFactoryWrapper.cs
- AggregateNode.cs
- BitmapSource.cs
- ConstraintStruct.cs
- TextEditorSpelling.cs
- RegexMatchCollection.cs
- BamlCollectionHolder.cs
- EncodingFallbackAwareXmlTextWriter.cs
- EntityClientCacheKey.cs
- LocalBuilder.cs
- DebuggerAttributes.cs
- Cursor.cs
- TextEditorContextMenu.cs
- SessionStateSection.cs
- InstallerTypeAttribute.cs
- RuntimeConfigLKG.cs
- storepermission.cs
- PathGeometry.cs
- dbdatarecord.cs
- FontEmbeddingManager.cs
- TaiwanLunisolarCalendar.cs
- MatrixUtil.cs
- PolyBezierSegmentFigureLogic.cs
- XmlSerializerAssemblyAttribute.cs
- XmlSchemaResource.cs
- VerificationAttribute.cs
- SimpleRecyclingCache.cs
- RefExpr.cs
- FrameworkContentElement.cs
- SchemaElementDecl.cs
- HotCommands.cs
- ValidationErrorCollection.cs
- HwndMouseInputProvider.cs
- JsonClassDataContract.cs
- DataGridViewComboBoxCell.cs
- BaseProcessor.cs
- TimeStampChecker.cs
- EnumMemberAttribute.cs
- ChannelManager.cs
- EntityModelSchemaGenerator.cs
- WindowsRegion.cs
- TraceContextRecord.cs
- XPathDescendantIterator.cs
- FileDialogPermission.cs
- WindowsFormsHelpers.cs
- RadioButton.cs
- Int32AnimationBase.cs
- ElementNotAvailableException.cs
- CodeTypeDelegate.cs
- LineServicesCallbacks.cs
- EnumConverter.cs
- TextAnchor.cs
- X509RawDataKeyIdentifierClause.cs
- XamlTreeBuilderBamlRecordWriter.cs
- OdbcErrorCollection.cs
- ReverseInheritProperty.cs
- StyleConverter.cs
- HttpModulesSection.cs
- SignatureResourcePool.cs
- WindowsContainer.cs
- EndpointDiscoveryBehavior.cs
- MobileDeviceCapabilitiesSectionHandler.cs
- Rijndael.cs
- StyleCollection.cs
- TreeViewDesigner.cs
- IdentityHolder.cs
- ServiceDescriptionReflector.cs
- DataGridToolTip.cs
- OrderedDictionary.cs