//------------------------------------------------------------------------------ // <copyright file="DataMemberConverter.cs" company="Microsoft"> // Copyright (c) Microsoft Corporation. All rights reserved. // </copyright> //------------------------------------------------------------------------------ namespace System.Web.UI.Design.MobileControls.Converters { using System; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Data; using System.Diagnostics; using System.Globalization; using System.Runtime.InteropServices; using System.Web.UI.Design; using System.Security.Permissions; /// <include file='doc\DataMemberConverter.uex' path='docs/doc[@for="DataMemberConverter"]/*' /> /// <devdoc> /// <para> /// Provides design-time support for a component's DataMember properties. /// </para> /// </devdoc> [ System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode) ] [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public class DataMemberConverter : TypeConverter { /// <include file='doc\DataMemberConverter.uex' path='docs/doc[@for="DataMemberConverter.DataMemberConverter"]/*' /> /// <devdoc> /// <para> /// Initializes a new instance of <see cref='System.Web.UI.Design.DataFieldConverter'/>. /// </para> /// </devdoc> public DataMemberConverter() { } /// <include file='doc\DataMemberConverter.uex' path='docs/doc[@for="DataMemberConverter.CanConvertFrom"]/*' /> /// <devdoc> /// <para> /// Gets a value indicating whether this converter can /// convert an object in the given source type to the native type of the converter /// using the context. /// </para> /// </devdoc> public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(string)) { return true; } return false; } /// <include file='doc\DataMemberConverter.uex' path='docs/doc[@for="DataMemberConverter.ConvertFrom"]/*' /> /// <devdoc> /// <para> /// Converts the given object to the converter's native type. /// </para> /// </devdoc> public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value == null) { return String.Empty; } else if (value.GetType() == typeof(string)) { return (string)value; } throw GetConvertFromException(value); } /// <include file='doc\DataMemberConverter.uex' path='docs/doc[@for="DataMemberConverter.GetStandardValues"]/*' /> /// <devdoc> /// <para> /// Gets the fields present within the selected data source if information about them is available. /// </para> /// </devdoc> public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { string[] names = null; if (context != null) { IComponent component = context.Instance as IComponent; if (component is IDeviceSpecificChoiceDesigner) { component = ((IDeviceSpecificChoiceDesigner)component).UnderlyingControl; } if (component != null) { ISite componentSite = component.Site; if (componentSite != null) { IDesignerHost designerHost = (IDesignerHost)componentSite.GetService(typeof(IDesignerHost)); if (designerHost != null) { IDesigner designer = designerHost.GetDesigner(component); if (designer is IDataSourceProvider) { object dataSource = ((IDataSourceProvider)designer).GetSelectedDataSource(); if (dataSource != null) { names = DesignTimeData.GetDataMembers(dataSource); } } } } } if (names == null) { names = new string[0]; } Array.Sort(names); } return new StandardValuesCollection(names); } /// <include file='doc\DataMemberConverter.uex' path='docs/doc[@for="DataMemberConverter.GetStandardValuesExclusive"]/*' /> /// <devdoc> /// <para> /// Gets a value indicating whether the collection of standard values returned from /// <see cref='System.ComponentModel.TypeConverter.GetStandardValues'/> is an exclusive /// list of possible values, using the specified context. /// </para> /// </devdoc> public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) { return false; } /// <include file='doc\DataMemberConverter.uex' path='docs/doc[@for="DataMemberConverter.GetStandardValuesSupported"]/*' /> /// <devdoc> /// <para> /// Gets a value indicating whether this object supports a standard set of values /// that can be picked from a list. /// </para> /// </devdoc> public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { if (context.Instance is IComponent) { // We only support the dropdown in single-select mode. return true; } return false; } } }