Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / WinForms / Managed / System / WinForms / RelatedPropertyManager.cs / 1 / 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
- BrowserCapabilitiesFactory.cs
- ReturnType.cs
- AppearanceEditorPart.cs
- SubtreeProcessor.cs
- ContextStack.cs
- DeploymentExceptionMapper.cs
- WebServiceParameterData.cs
- CompositeDataBoundControl.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- arc.cs
- CubicEase.cs
- PropertyConverter.cs
- MonitorWrapper.cs
- Script.cs
- BinaryWriter.cs
- RootProjectionNode.cs
- DocumentViewerAutomationPeer.cs
- SafeNativeMethodsOther.cs
- FormattedTextSymbols.cs
- RenderingEventArgs.cs
- DataObjectFieldAttribute.cs
- EntityDesignerUtils.cs
- HttpRequest.cs
- VScrollBar.cs
- CheckBoxStandardAdapter.cs
- WebPartChrome.cs
- NetworkAddressChange.cs
- MdbDataFileEditor.cs
- HandoffBehavior.cs
- Baml2006SchemaContext.cs
- StateDesigner.Layouts.cs
- AttachmentCollection.cs
- RepeatBehaviorConverter.cs
- BufferedReadStream.cs
- InfoCardUIAgent.cs
- SignalGate.cs
- GridToolTip.cs
- HostingEnvironmentWrapper.cs
- LayoutEditorPart.cs
- ImageMapEventArgs.cs
- Directory.cs
- ToolboxDataAttribute.cs
- SiteIdentityPermission.cs
- ErrorsHelper.cs
- DetailsViewCommandEventArgs.cs
- ScrollContentPresenter.cs
- XMLSchema.cs
- String.cs
- HwndSource.cs
- X509Chain.cs
- UpdateCompiler.cs
- ReversePositionQuery.cs
- ExpressionBuilder.cs
- DirtyTextRange.cs
- IntPtr.cs
- Error.cs
- MenuScrollingVisibilityConverter.cs
- ServiceDebugBehavior.cs
- milexports.cs
- HwndTarget.cs
- ResXFileRef.cs
- InvokeGenerator.cs
- Compress.cs
- DataTableClearEvent.cs
- BufferedGraphicsManager.cs
- AlignmentXValidation.cs
- WorkflowTerminatedException.cs
- WindowsSpinner.cs
- InheritanceContextChangedEventManager.cs
- InputManager.cs
- TrustManagerMoreInformation.cs
- SimpleWebHandlerParser.cs
- GeneralTransform3D.cs
- EntityConnection.cs
- _AutoWebProxyScriptWrapper.cs
- RadioButtonList.cs
- WebResourceAttribute.cs
- WebPartTransformer.cs
- TextSerializer.cs
- ComponentCommands.cs
- ObjectAssociationEndMapping.cs
- Helpers.cs
- QueryOutputWriterV1.cs
- ViewGenerator.cs
- FieldBuilder.cs
- HyperLinkStyle.cs
- IList.cs
- HttpCacheVaryByContentEncodings.cs
- OdbcConnectionOpen.cs
- MSHTMLHost.cs
- TickBar.cs
- WindowsPen.cs
- SrgsToken.cs
- ExceptionTrace.cs
- DbConnectionHelper.cs
- StreamProxy.cs
- EntityDataSourceEntitySetNameItem.cs
- IIS7UserPrincipal.cs
- HtmlToClrEventProxy.cs
- DBConcurrencyException.cs