Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WinForms / System / WinForms / Design / ListControlBoundActionList.cs / 1 / ListControlBoundActionList.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* */ namespace System.Windows.Forms.Design { using System; using System.Diagnostics; using System.Design; using System.Windows.Forms.Design; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Windows.Forms.Design.Behavior; ////// /// [ComplexBindingProperties("DataSource", "DataMember")] internal class ListControlBoundActionList : DesignerActionList { private ControlDesigner _owner; private bool _boundMode; private object _boundSelectedValue = null; private DesignerActionUIService uiService = null; public ListControlBoundActionList(ControlDesigner owner) : base(owner.Component) { _owner = owner; ListControl listControl = (ListControl)Component; if (listControl.DataSource != null) { // data source might not be set yet when this is created... _boundMode = true; } uiService = GetService(typeof(DesignerActionUIService)) as DesignerActionUIService; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] private void RefreshPanelContent() { if (uiService != null) { uiService.Refresh(_owner.Component); } } public override DesignerActionItemCollection GetSortedActionItems() { DesignerActionItemCollection returnItems = new DesignerActionItemCollection(); returnItems.Add(new DesignerActionPropertyItem("BoundMode", SR.GetString(SR.BoundModeDisplayName), SR.GetString(SR.DataCategoryName), SR.GetString(SR.BoundModeDescription))); ListControl listControl =Component as ListControl; if (_boundMode || (listControl != null && listControl.DataSource != null)) { // data source might not be set yet when this is created... _boundMode = true; // Header item returnItems.Add(new DesignerActionHeaderItem(SR.GetString(SR.BoundModeHeader), SR.GetString(SR.DataCategoryName))); // Property items returnItems.Add(new DesignerActionPropertyItem("DataSource", SR.GetString(SR.DataSourceDisplayName), SR.GetString(SR.DataCategoryName), SR.GetString(SR.DataSourceDescription))); returnItems.Add(new DesignerActionPropertyItem("DisplayMember", SR.GetString(SR.DisplayMemberDisplayName), SR.GetString(SR.DataCategoryName), SR.GetString(SR.DisplayMemberDescription))); returnItems.Add(new DesignerActionPropertyItem("ValueMember", SR.GetString(SR.ValueMemberDisplayName), SR.GetString(SR.DataCategoryName), SR.GetString(SR.ValueMemberDescription))); returnItems.Add(new DesignerActionPropertyItem("BoundSelectedValue", SR.GetString(SR.BoundSelectedValueDisplayName), SR.GetString(SR.DataCategoryName), SR.GetString(SR.BoundSelectedValueDescription))); return returnItems; } else { // Header item returnItems.Add(new DesignerActionHeaderItem(SR.GetString(SR.UnBoundModeHeader), SR.GetString(SR.DataCategoryName))); // Property item returnItems.Add(new DesignerActionMethodItem(this, "InvokeItemsDialog", SR.GetString(SR.EditItemDisplayName), SR.GetString(SR.DataCategoryName), SR.GetString(SR.EditItemDescription), true)); return returnItems; } } public bool BoundMode { get { return _boundMode; } set { if(!value) { this.DataSource = null; } if(this.DataSource == null) { // verify this worked... if not don't change anything... _boundMode = value; } RefreshPanelContent(); } } public void InvokeItemsDialog() { EditorServiceContext.EditValue(_owner, Component, "Items"); } [AttributeProvider(typeof(IListSource))] public object DataSource { get { return ((ListControl)Component).DataSource; } set { // left to do: transaction stuff ListControl listControl = (ListControl)Component; IDesignerHost host = GetService(typeof(IDesignerHost)) as IDesignerHost; IComponentChangeService changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; PropertyDescriptor dataSourceProp = TypeDescriptor.GetProperties(listControl)["DataSource"]; if(host != null && changeService != null) { using(DesignerTransaction transaction = host.CreateTransaction("DGV DataSource TX Name")) { changeService.OnComponentChanging(Component, dataSourceProp); listControl.DataSource = value; if (null == value) { listControl.DisplayMember = ""; listControl.ValueMember = ""; } changeService.OnComponentChanged(Component, dataSourceProp, null, null); transaction.Commit(); RefreshPanelContent(); // could be set back to none... } } else { Debug.Fail("Could not get either IDEsignerHost or IComponentChangeService"); } } } ////// Provides a designer for TextBox. ////// /// ///private System.Windows.Forms.Binding GetSelectedValueBinding() { ListControl listControl = (ListControl)Component; System.Windows.Forms.Binding foundBinding = null; if (listControl.DataBindings != null) { foreach (System.Windows.Forms.Binding binding in listControl.DataBindings) { if (binding.PropertyName == "SelectedValue") foundBinding = binding; } } return foundBinding; } private void SetSelectedValueBinding(object dataSource, string dataMember) { // left to do: transaction stuff ListControl listControl = (ListControl)Component; IDesignerHost host = GetService(typeof(IDesignerHost)) as IDesignerHost; IComponentChangeService changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; PropertyDescriptor dataSourceProp = TypeDescriptor.GetProperties(listControl)["DataBindings"]; if(host != null && changeService != null) { using(DesignerTransaction transaction = host.CreateTransaction("TextBox DataSource RESX")) { changeService.OnComponentChanging(_owner.Component, dataSourceProp); System.Windows.Forms.Binding foundBinding = GetSelectedValueBinding(); if(foundBinding != null) { listControl.DataBindings.Remove(foundBinding); } if(listControl.DataBindings != null) { // This prototype doesn't do anything with the DataMember if (dataSource != null && !String.IsNullOrEmpty(dataMember)) { listControl.DataBindings.Add("SelectedValue", dataSource, dataMember); } } changeService.OnComponentChanged(_owner.Component, dataSourceProp, null, null); transaction.Commit(); } } else { Debug.Fail("Could not get either IDEsignerHost or IComponentChangeService"); } } [ Editor("System.Windows.Forms.Design.DataMemberFieldEditor, " + AssemblyRef.SystemDesign, typeof(System.Drawing.Design.UITypeEditor)) ] public string DisplayMember { get { return ((ListControl)Component).DisplayMember; } set { // left to do: transaction stuff ListControl listControl = (ListControl)Component; IDesignerHost host = GetService(typeof(IDesignerHost)) as IDesignerHost; IComponentChangeService changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; PropertyDescriptor dataSourceProp = TypeDescriptor.GetProperties(listControl)["DisplayMember"]; if(host != null && changeService != null) { using(DesignerTransaction transaction = host.CreateTransaction("DGV DataSource TX Name")) { changeService.OnComponentChanging(Component, dataSourceProp); listControl.DisplayMember = value; changeService.OnComponentChanged(Component, dataSourceProp, null, null); transaction.Commit(); } } else { Debug.Fail("Could not get either IDEsignerHost or IComponentChangeService"); } } } [ Editor("System.Windows.Forms.Design.DataMemberFieldEditor, " + AssemblyRef.SystemDesign, typeof(System.Drawing.Design.UITypeEditor)) ] public string ValueMember { get { return ((ListControl)Component).ValueMember; } set { // left to do: transaction stuff ListControl listControl = (ListControl)_owner.Component; IDesignerHost host = GetService(typeof(IDesignerHost)) as IDesignerHost; IComponentChangeService changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; PropertyDescriptor dataSourceProp = TypeDescriptor.GetProperties(listControl)["ValueMember"]; if(host != null && changeService != null) { using(DesignerTransaction transaction = host.CreateTransaction("DGV DataSource TX Name")) { changeService.OnComponentChanging(Component, dataSourceProp); listControl.ValueMember = value; changeService.OnComponentChanged(Component, dataSourceProp, null, null); transaction.Commit(); } } else { Debug.Fail("Could not get either IDEsignerHost or IComponentChangeService"); } } } [ TypeConverterAttribute("System.Windows.Forms.Design.DesignBindingConverter"), Editor("System.Windows.Forms.Design.DesignBindingEditor, " + AssemblyRef.SystemDesign, typeof(System.Drawing.Design.UITypeEditor)) ] public object BoundSelectedValue { get { System.Windows.Forms.Binding b = GetSelectedValueBinding(); string dataMember; object dataSource; if (b == null) { dataMember = null; dataSource = null; } else { dataMember = b.BindingMemberInfo.BindingMember; dataSource = b.DataSource; } string typeName = string.Format(System.Globalization.CultureInfo.InvariantCulture, "System.Windows.Forms.Design.DesignBinding, {0}", typeof(ControlDesigner).Assembly.FullName); _boundSelectedValue = TypeDescriptor.CreateInstance(null, Type.GetType(typeName), new Type[] { typeof(object), typeof(string) }, new object[] { dataSource, dataMember }); return _boundSelectedValue; } set { if (value is String) { PropertyDescriptor pd = TypeDescriptor.GetProperties(this)["BoundSelectedValue"]; TypeConverter tc = pd.Converter; _boundSelectedValue = tc.ConvertFrom(new EditorServiceContext(_owner), System.Globalization.CultureInfo.InvariantCulture, value); } else { _boundSelectedValue = value; if (value != null) { object dataSource = TypeDescriptor.GetProperties(_boundSelectedValue)["DataSource"].GetValue(_boundSelectedValue); string dataMember = (string)TypeDescriptor.GetProperties(_boundSelectedValue)["DataMember"].GetValue(_boundSelectedValue); SetSelectedValueBinding(dataSource, dataMember); } } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AssemblyCollection.cs
- Message.cs
- ObjectStateFormatter.cs
- PersonalizationEntry.cs
- UInt64.cs
- Pen.cs
- ThreadExceptionEvent.cs
- EntitySet.cs
- _DomainName.cs
- CustomCredentialPolicy.cs
- Stylesheet.cs
- MetabaseServerConfig.cs
- ToolStripItemCollection.cs
- RealProxy.cs
- ClientFormsIdentity.cs
- QuaternionIndependentAnimationStorage.cs
- WmlPhoneCallAdapter.cs
- Stylus.cs
- BindToObject.cs
- ThicknessAnimationUsingKeyFrames.cs
- ClientTargetCollection.cs
- Clock.cs
- XmlSecureResolver.cs
- RepeatEnumerable.cs
- RawUIStateInputReport.cs
- SecurityIdentifierElement.cs
- Int32.cs
- ListViewUpdateEventArgs.cs
- InstanceHandle.cs
- XmlStringTable.cs
- SrgsText.cs
- UndoEngine.cs
- DefaultTraceListener.cs
- DataGridViewCellStyleChangedEventArgs.cs
- Timer.cs
- VisualStyleTypesAndProperties.cs
- SafeProcessHandle.cs
- DatatypeImplementation.cs
- TrustManager.cs
- PageAdapter.cs
- SiblingIterators.cs
- VarInfo.cs
- DbMetaDataCollectionNames.cs
- Pts.cs
- GeneralTransform3DCollection.cs
- FilteredReadOnlyMetadataCollection.cs
- PageContentAsyncResult.cs
- SchemaImporter.cs
- ControlEvent.cs
- WebPartUserCapability.cs
- ValidationHelpers.cs
- DecoderFallback.cs
- MediaScriptCommandRoutedEventArgs.cs
- FileDialogCustomPlace.cs
- Substitution.cs
- BooleanAnimationUsingKeyFrames.cs
- ExpressionVisitorHelpers.cs
- BrowserTree.cs
- ZipIOLocalFileBlock.cs
- Comparer.cs
- SettingsPropertyValueCollection.cs
- XmlILIndex.cs
- IOException.cs
- SignedXml.cs
- ImageField.cs
- HttpModuleActionCollection.cs
- LinearGradientBrush.cs
- BigInt.cs
- RegexMatch.cs
- DesignerVerb.cs
- Grant.cs
- ToolStripSplitStackLayout.cs
- XsltException.cs
- PageClientProxyGenerator.cs
- GraphicsPathIterator.cs
- TypeSemantics.cs
- log.cs
- BindingContext.cs
- TrackBar.cs
- DependsOnAttribute.cs
- ListViewCommandEventArgs.cs
- AutoGeneratedFieldProperties.cs
- HitTestParameters3D.cs
- ElementProxy.cs
- RoutedEventHandlerInfo.cs
- HttpApplication.cs
- HttpCapabilitiesEvaluator.cs
- IDQuery.cs
- LazyTextWriterCreator.cs
- WebPartDisplayModeEventArgs.cs
- DataKeyArray.cs
- WebServiceEnumData.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- TreeWalkHelper.cs
- webeventbuffer.cs
- MultiViewDesigner.cs
- SchemaElementLookUpTableEnumerator.cs
- WhileDesigner.cs
- EncryptedPackage.cs
- FontSourceCollection.cs