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
- DataListComponentEditor.cs
- FileDataSourceCache.cs
- UndirectedGraph.cs
- OleDbPropertySetGuid.cs
- StrongNameUtility.cs
- HMACSHA1.cs
- ImageMapEventArgs.cs
- ComPlusTypeValidator.cs
- BaseResourcesBuildProvider.cs
- Light.cs
- AppSettingsReader.cs
- Queue.cs
- ExpressionCopier.cs
- DeviceSpecific.cs
- ScriptMethodAttribute.cs
- RefreshPropertiesAttribute.cs
- BuildDependencySet.cs
- WindowsScrollBarBits.cs
- ControlBuilderAttribute.cs
- X509Utils.cs
- ReliableSessionBindingElementImporter.cs
- FontSourceCollection.cs
- XmlTextEncoder.cs
- TextDecorationUnitValidation.cs
- ProtectedProviderSettings.cs
- DataServiceCollectionOfT.cs
- DataContext.cs
- ScriptingAuthenticationServiceSection.cs
- TabRenderer.cs
- StringToken.cs
- CompositeControlDesigner.cs
- TextEndOfSegment.cs
- HealthMonitoringSectionHelper.cs
- DeferrableContentConverter.cs
- DataGridViewDataConnection.cs
- LabelEditEvent.cs
- ModelTreeEnumerator.cs
- MetadataWorkspace.cs
- ClosableStream.cs
- QilInvokeEarlyBound.cs
- SqlReferenceCollection.cs
- PaperSize.cs
- VirtualPathData.cs
- HijriCalendar.cs
- CodeDelegateCreateExpression.cs
- WorkflowMessageEventArgs.cs
- CollaborationHelperFunctions.cs
- DiagnosticEventProvider.cs
- StreamReader.cs
- XmlAttributeOverrides.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- Rotation3DAnimationBase.cs
- ResourceBinder.cs
- Label.cs
- JsonDeserializer.cs
- XmlSubtreeReader.cs
- TypeExtension.cs
- XamlPathDataSerializer.cs
- DaylightTime.cs
- ChangeInterceptorAttribute.cs
- _FtpDataStream.cs
- CodeMethodReturnStatement.cs
- DBParameter.cs
- DirectoryRedirect.cs
- Cursors.cs
- MarkupCompilePass1.cs
- WebPartConnectionsCloseVerb.cs
- FileController.cs
- ListItemCollection.cs
- GridViewColumnCollectionChangedEventArgs.cs
- XmlHierarchicalDataSourceView.cs
- SqlNamer.cs
- XPathSelfQuery.cs
- BuildProviderUtils.cs
- Error.cs
- AttributeQuery.cs
- SkipStoryboardToFill.cs
- XamlPoint3DCollectionSerializer.cs
- QilStrConcat.cs
- embossbitmapeffect.cs
- OleDbDataAdapter.cs
- CompiledRegexRunnerFactory.cs
- datacache.cs
- PersonalizationEntry.cs
- URLIdentityPermission.cs
- CommentEmitter.cs
- DebugInfoGenerator.cs
- ColorAnimation.cs
- XPathNavigatorReader.cs
- RayMeshGeometry3DHitTestResult.cs
- WasEndpointConfigContainer.cs
- PackWebRequestFactory.cs
- DrawingGroup.cs
- TextEndOfLine.cs
- ScrollEvent.cs
- PresentationTraceSources.cs
- ServiceDescriptionSerializer.cs
- Deserializer.cs
- CapabilitiesState.cs
- CompositeActivityMarkupSerializer.cs