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
- RegexCompilationInfo.cs
- DocumentSequence.cs
- SynchronizedInputPattern.cs
- TrustSection.cs
- ScrollPatternIdentifiers.cs
- ButtonBaseAdapter.cs
- Light.cs
- SqlBooleanizer.cs
- TextTreeUndo.cs
- TableCellCollection.cs
- AppDomainInstanceProvider.cs
- RadioButtonBaseAdapter.cs
- ContractNamespaceAttribute.cs
- SerializableAttribute.cs
- webbrowsersite.cs
- Calendar.cs
- RangeBaseAutomationPeer.cs
- UpdateExpressionVisitor.cs
- BinaryObjectReader.cs
- EventSinkHelperWriter.cs
- ComplexPropertyEntry.cs
- IdleTimeoutMonitor.cs
- XmlTextAttribute.cs
- TimeZone.cs
- MethodRental.cs
- ObjRef.cs
- CaretElement.cs
- TypePresenter.xaml.cs
- Matrix3D.cs
- PageRanges.cs
- AuthorizationRuleCollection.cs
- Pts.cs
- DecimalConverter.cs
- WeakReference.cs
- CommentEmitter.cs
- EllipticalNodeOperations.cs
- RangeContentEnumerator.cs
- StrokeCollectionConverter.cs
- OverflowException.cs
- SerializationHelper.cs
- EntityDataSourceColumn.cs
- OleDbException.cs
- FileStream.cs
- LogStream.cs
- LabelAutomationPeer.cs
- AsymmetricSignatureFormatter.cs
- XmlDictionaryString.cs
- WindowsPen.cs
- ImportCatalogPart.cs
- RoleService.cs
- WasAdminWrapper.cs
- EnterpriseServicesHelper.cs
- GridViewColumnHeader.cs
- KernelTypeValidation.cs
- Matrix3DConverter.cs
- RemotingAttributes.cs
- CancellationToken.cs
- ExeConfigurationFileMap.cs
- TextTreeInsertElementUndoUnit.cs
- ToolboxDataAttribute.cs
- AutomationElement.cs
- HexParser.cs
- TextEditorCopyPaste.cs
- DocumentPageViewAutomationPeer.cs
- SelectingProviderEventArgs.cs
- FormattedTextSymbols.cs
- SignatureResourcePool.cs
- DocumentXPathNavigator.cs
- BCLDebug.cs
- SrgsRuleRef.cs
- MenuDesigner.cs
- DataGridHeaderBorder.cs
- DeleteHelper.cs
- TimelineGroup.cs
- DataRelation.cs
- PasswordRecovery.cs
- SqlBuffer.cs
- SqlFunctionAttribute.cs
- DateTimeFormatInfoScanner.cs
- Int32CAMarshaler.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- SqlDataSourceQueryEditorForm.cs
- BasicCellRelation.cs
- TrackingStringDictionary.cs
- CatalogPartCollection.cs
- _OverlappedAsyncResult.cs
- DriveNotFoundException.cs
- ExpandoClass.cs
- FontUnitConverter.cs
- COM2PropertyDescriptor.cs
- CommentEmitter.cs
- MimeBasePart.cs
- PermissionSet.cs
- XmlAutoDetectWriter.cs
- LineGeometry.cs
- ScriptIgnoreAttribute.cs
- SynchronizationContextHelper.cs
- GridLength.cs
- ViewPort3D.cs
- ClientSettingsStore.cs