Code:
/ DotNET / DotNET / 8.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
- BitmapData.cs
- XMLUtil.cs
- InkCollectionBehavior.cs
- DynamicExpression.cs
- DependencyObjectProvider.cs
- Model3D.cs
- NeedSkipTokenVisitor.cs
- ModelTreeEnumerator.cs
- NavigationPropertySingletonExpression.cs
- SkipQueryOptionExpression.cs
- DesignerActionUIService.cs
- DataError.cs
- ApplicationCommands.cs
- GenericUriParser.cs
- Animatable.cs
- FixedDSBuilder.cs
- GenericTextProperties.cs
- ResourceAssociationType.cs
- AlphaSortedEnumConverter.cs
- PathNode.cs
- SoapAttributes.cs
- ListItemDetailViewAttribute.cs
- ValidationHelpers.cs
- EnumDataContract.cs
- DataGrid.cs
- BooleanToVisibilityConverter.cs
- ReachSerializableProperties.cs
- CodeTypeDelegate.cs
- DocumentXPathNavigator.cs
- RtfToXamlReader.cs
- GraphicsPathIterator.cs
- BitmapScalingModeValidation.cs
- ListControlDataBindingHandler.cs
- DesignerDataColumn.cs
- HtmlInputRadioButton.cs
- StringDictionaryWithComparer.cs
- DatatypeImplementation.cs
- IndexedGlyphRun.cs
- DbParameterHelper.cs
- DataGridViewRowConverter.cs
- OwnerDrawPropertyBag.cs
- PropertyGridCommands.cs
- RSAPKCS1SignatureDeformatter.cs
- SchemaMerger.cs
- BasicAsyncResult.cs
- KeyedCollection.cs
- RemotingException.cs
- XmlSortKeyAccumulator.cs
- ByeOperationCD1AsyncResult.cs
- HtmlInputCheckBox.cs
- DataObjectFieldAttribute.cs
- TreeBuilderXamlTranslator.cs
- XPathItem.cs
- SearchForVirtualItemEventArgs.cs
- Select.cs
- LocatorGroup.cs
- x509store.cs
- ShaderEffect.cs
- DoubleCollectionConverter.cs
- TraceHwndHost.cs
- SecurityKeyType.cs
- Ops.cs
- PartialCachingControl.cs
- SqlUdtInfo.cs
- DBCSCodePageEncoding.cs
- BamlResourceContent.cs
- SqlDataSourceSelectingEventArgs.cs
- SignatureToken.cs
- TreeNodeMouseHoverEvent.cs
- IconConverter.cs
- Header.cs
- HttpCookie.cs
- StylusSystemGestureEventArgs.cs
- DynamicValidatorEventArgs.cs
- WmlPhoneCallAdapter.cs
- Wildcard.cs
- ECDsa.cs
- Label.cs
- ACL.cs
- BasicKeyConstraint.cs
- GeneralTransform3D.cs
- SortableBindingList.cs
- RadioButtonAutomationPeer.cs
- DataGridSortCommandEventArgs.cs
- ExpressionBinding.cs
- DataSourceExpression.cs
- XamlToRtfWriter.cs
- ObfuscationAttribute.cs
- ObjectIDGenerator.cs
- Graphics.cs
- QuaternionAnimationBase.cs
- PrimitiveCodeDomSerializer.cs
- Panel.cs
- assemblycache.cs
- EventToken.cs
- TextTreeInsertUndoUnit.cs
- DeclarativeConditionsCollection.cs
- ThreadPool.cs
- WebPageTraceListener.cs
- Zone.cs