Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / RelatedPropertyManager.cs / 1305376 / RelatedPropertyManager.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using System;
using Microsoft.Win32;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.ComponentModel;
using System.Collections;
internal class RelatedPropertyManager : PropertyManager {
BindingManagerBase parentManager;
string dataField;
PropertyDescriptor fieldInfo;
[
SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors") // If the constructor does not set the dataSource
// it would be a breaking change.
]
internal RelatedPropertyManager(BindingManagerBase parentManager, string dataField) : base(GetCurrentOrNull(parentManager), dataField) {
Bind(parentManager, dataField);
}
private void Bind(BindingManagerBase parentManager, string dataField) {
Debug.Assert(parentManager != null, "How could this be a null parentManager.");
this.parentManager = parentManager;
this.dataField = dataField;
this.fieldInfo = parentManager.GetItemProperties().Find(dataField, true);
if (fieldInfo == null)
throw new ArgumentException(SR.GetString(SR.RelatedListManagerChild, dataField));
// this.finalType = fieldInfo.PropertyType;
parentManager.CurrentItemChanged += new EventHandler(ParentManager_CurrentItemChanged);
Refresh();
}
internal override string GetListName() {
string name = GetListName(new ArrayList());
if (name.Length > 0) {
return name;
}
return base.GetListName();
}
protected internal override string GetListName(ArrayList listAccessors) {
listAccessors.Insert(0, fieldInfo);
return parentManager.GetListName(listAccessors);
}
internal override PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors) {
PropertyDescriptor[] accessors;
if (listAccessors != null && listAccessors.Length > 0) {
accessors = new PropertyDescriptor[listAccessors.Length + 1];
listAccessors.CopyTo(accessors, 1);
}
else {
accessors = new PropertyDescriptor[1];
}
// Set this accessor (add to the beginning)
accessors[0] = this.fieldInfo;
// Get props
return parentManager.GetItemProperties(accessors);
}
private void ParentManager_CurrentItemChanged(object sender, EventArgs e) {
Refresh();
}
private void Refresh() {
EndCurrentEdit();
SetDataSource(GetCurrentOrNull(parentManager));
OnCurrentChanged(EventArgs.Empty);
}
internal override Type BindType {
get {
return fieldInfo.PropertyType;
}
}
public override object Current {
get {
return (this.DataSource != null) ? fieldInfo.GetValue(this.DataSource) : null;
}
}
static private object GetCurrentOrNull(BindingManagerBase parentManager) {
bool anyCurrent = (parentManager.Position >= 0 && parentManager.Position < parentManager.Count);
return anyCurrent ? parentManager.Current : null;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using System;
using Microsoft.Win32;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.ComponentModel;
using System.Collections;
internal class RelatedPropertyManager : PropertyManager {
BindingManagerBase parentManager;
string dataField;
PropertyDescriptor fieldInfo;
[
SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors") // If the constructor does not set the dataSource
// it would be a breaking change.
]
internal RelatedPropertyManager(BindingManagerBase parentManager, string dataField) : base(GetCurrentOrNull(parentManager), dataField) {
Bind(parentManager, dataField);
}
private void Bind(BindingManagerBase parentManager, string dataField) {
Debug.Assert(parentManager != null, "How could this be a null parentManager.");
this.parentManager = parentManager;
this.dataField = dataField;
this.fieldInfo = parentManager.GetItemProperties().Find(dataField, true);
if (fieldInfo == null)
throw new ArgumentException(SR.GetString(SR.RelatedListManagerChild, dataField));
// this.finalType = fieldInfo.PropertyType;
parentManager.CurrentItemChanged += new EventHandler(ParentManager_CurrentItemChanged);
Refresh();
}
internal override string GetListName() {
string name = GetListName(new ArrayList());
if (name.Length > 0) {
return name;
}
return base.GetListName();
}
protected internal override string GetListName(ArrayList listAccessors) {
listAccessors.Insert(0, fieldInfo);
return parentManager.GetListName(listAccessors);
}
internal override PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors) {
PropertyDescriptor[] accessors;
if (listAccessors != null && listAccessors.Length > 0) {
accessors = new PropertyDescriptor[listAccessors.Length + 1];
listAccessors.CopyTo(accessors, 1);
}
else {
accessors = new PropertyDescriptor[1];
}
// Set this accessor (add to the beginning)
accessors[0] = this.fieldInfo;
// Get props
return parentManager.GetItemProperties(accessors);
}
private void ParentManager_CurrentItemChanged(object sender, EventArgs e) {
Refresh();
}
private void Refresh() {
EndCurrentEdit();
SetDataSource(GetCurrentOrNull(parentManager));
OnCurrentChanged(EventArgs.Empty);
}
internal override Type BindType {
get {
return fieldInfo.PropertyType;
}
}
public override object Current {
get {
return (this.DataSource != null) ? fieldInfo.GetValue(this.DataSource) : null;
}
}
static private object GetCurrentOrNull(BindingManagerBase parentManager) {
bool anyCurrent = (parentManager.Position >= 0 && parentManager.Position < parentManager.Count);
return anyCurrent ? parentManager.Current : null;
}
}
}
// 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
- NonBatchDirectoryCompiler.cs
- Calendar.cs
- UnsafeNativeMethods.cs
- DesignerCategoryAttribute.cs
- DataServiceStreamProviderWrapper.cs
- ExceptQueryOperator.cs
- SrgsElementFactoryCompiler.cs
- SetterBase.cs
- ResourceProviderFactory.cs
- InvalidOperationException.cs
- ConnectionPoolManager.cs
- VisualStateManager.cs
- DisplayClaim.cs
- MultilineStringConverter.cs
- ToolStripDropDown.cs
- ListViewPagedDataSource.cs
- DecryptedHeader.cs
- RawStylusActions.cs
- StickyNoteAnnotations.cs
- SpanIndex.cs
- HtmlElement.cs
- CompleteWizardStep.cs
- UniqueConstraint.cs
- WebPartUtil.cs
- CompensationToken.cs
- BaseCodeDomTreeGenerator.cs
- HttpModuleAction.cs
- ReliableOutputSessionChannel.cs
- HtmlControlAdapter.cs
- XmlElementCollection.cs
- DateTimeFormat.cs
- documentation.cs
- SqlConnectionStringBuilder.cs
- IISUnsafeMethods.cs
- State.cs
- PageStatePersister.cs
- TextCompositionManager.cs
- FixUpCollection.cs
- PropertyFilterAttribute.cs
- RequestQueryParser.cs
- SpeechSynthesizer.cs
- ConfigurationSchemaErrors.cs
- wmiprovider.cs
- _FixedSizeReader.cs
- ProfilePropertyMetadata.cs
- MorphHelper.cs
- ProfileEventArgs.cs
- DetailsViewDeletedEventArgs.cs
- ToolStripActionList.cs
- WindowsUpDown.cs
- DecimalMinMaxAggregationOperator.cs
- MemoryRecordBuffer.cs
- ToolboxSnapDragDropEventArgs.cs
- Transform3DCollection.cs
- PageThemeCodeDomTreeGenerator.cs
- TimeSpanValidatorAttribute.cs
- ObjectSecurity.cs
- NullableIntMinMaxAggregationOperator.cs
- HttpServerVarsCollection.cs
- TextEditorTyping.cs
- CodeIndexerExpression.cs
- GatewayDefinition.cs
- EntityContainerEntitySetDefiningQuery.cs
- DesignParameter.cs
- TabOrder.cs
- InheritanceRules.cs
- PagesSection.cs
- glyphs.cs
- DocumentStream.cs
- TemplateControlCodeDomTreeGenerator.cs
- Vector3D.cs
- CustomValidator.cs
- Style.cs
- ErrorLog.cs
- ResourceIDHelper.cs
- Int32CollectionConverter.cs
- ListControlBoundActionList.cs
- DragAssistanceManager.cs
- CacheRequest.cs
- SizeIndependentAnimationStorage.cs
- User.cs
- RootBuilder.cs
- XmlDictionaryReaderQuotas.cs
- Rotation3DKeyFrameCollection.cs
- StrokeNodeData.cs
- AssociationTypeEmitter.cs
- XmlSerializerAssemblyAttribute.cs
- StateDesigner.Helpers.cs
- CompositeScriptReference.cs
- InvokeSchedule.cs
- ListViewUpdateEventArgs.cs
- CssStyleCollection.cs
- Model3D.cs
- LayoutTable.cs
- Comparer.cs
- SHA384.cs
- AspNetSynchronizationContext.cs
- ContainerSelectorGlyph.cs
- ByteFacetDescriptionElement.cs
- WebPartTransformer.cs