Adding list items with a Collection editor

Learning Resources
 

Adding list items with a Collection editor


Collection Editor

Provides a user interface that can edit most types of collections at design time.

Syntax

public class CollectionEditor : UITypeEditor

The CollectionEditor type exposes the following members.

`
  Name Description
Public method CollectionEditor Initializes a new instance of the CollectionEditor class using the specified collection type.
`
  Name Description
Protected property CollectionItemType Gets the data type of each item in the collection.
Protected property CollectionType Gets the data type of the collection object.
Protected property Context Gets a type descriptor that indicates the current context.
Protected property HelpTopic Gets the Help keyword to display the Help topic or topic list for when the editor's dialog box Help button or the F1 key is pressed.
Public property IsDropDownResizable Gets a value indicating whether drop-down editors should be resizable by the user. (Inherited from UITypeEditor.)
Protected property NewItemTypes Gets the available types of items that can be created for this collection.
`
  Name Description
Protected method CancelChanges Cancels changes to the collection.
Protected method CanRemoveInstance Indicates whether original members of the collection can be removed.
Protected method CanSelectMultipleInstances Indicates whether multiple collection items can be selected at once.
Protected method CreateCollectionForm Creates a new form to display and edit the current collection.
Protected method CreateCollectionItemType Gets the data type that this collection contains.
Protected method CreateInstance Creates a new instance of the specified collection item type.
Protected method CreateNewItemTypes Gets the data types that this collection editor can contain.
Protected method DestroyInstance Destroys the specified instance of the object.
Public method EditValue(IServiceProvider, Object) Edits the value of the specified object using the editor style indicated by the GetEditStyle method. (Inherited from UITypeEditor.)
Public method EditValue(ITypeDescriptorContext, IServiceProvider, Object) Edits the value of the specified object using the specified service provider and context. (Overrides UITypeEditor.EditValue(ITypeDescriptorContext, IServiceProvider, Object).)
Public method Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected method Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Protected method GetDisplayText Retrieves the display text for the given list item.
Public method GetEditStyle() Gets the editor style used by the EditValue method. (Inherited from UITypeEditor.)
Public method GetEditStyle(ITypeDescriptorContext) Gets the edit style used by the EditValue method. (Overrides UITypeEditor.GetEditStyle(ITypeDescriptorContext).)
Public method GetHashCode Serves as a hash function for a particular type. (Inherited from Object.)
Protected method GetItems Gets an array of objects containing the specified collection.
Protected method GetObjectsFromInstance Returns a list containing the given object
Public method GetPaintValueSupported() Indicates whether this editor supports painting a representation of an object's value. (Inherited from UITypeEditor.)
Public method GetPaintValueSupported(ITypeDescriptorContext) Indicates whether the specified context supports painting a representation of an object's value within the specified context. (Inherited from UITypeEditor.)
Protected method GetService Gets the requested service, if it is available.
Public method GetType Gets the Type of the current instance. (Inherited from Object.)
Protected method MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Public method PaintValue(PaintValueEventArgs) Paints a representation of the value of an object using the specified PaintValueEventArgs. (Inherited from UITypeEditor.)
Public method PaintValue(Object, Graphics, Rectangle) Paints a representation of the value of the specified object to the specified canvas. (Inherited from UITypeEditor.)
Protected method SetItems Sets the specified array as the items of the collection.
Protected method ShowHelp Displays the default Help topic for the collection editor.
Public method ToString Returns a string that represents the current object. (Inherited from Object.)
Notes to Inheritors

This editor can edit collections that have an Item property. The editor can determine the type of the collection from the Item property, if it exists. If the collection does not have this property, or if you want to provide collections of more than one type, you can override certain protected members of this class to customize the editor to support other types of collections.

The following code example uses an EditorAttribute to associate the CollectionEditor with a property.

 
[EditorAttribute(typeof(System.ComponentModel.Design.CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))]
public ICollection testCollection
{
    get
    {
        return Icollection;
    }
    set
    {
        Icollection = value;
    }
}
private ICollection Icollection;





Example

This example shows how to create a control named ContactCollectionEditor that implements a custom collection editor. The example shows how to specify the exact type of the object that a page developer can add to the control's collection property when using a custom collection editor. You associate a collection editor with a collection property (or the type of the property) by applying the EditorAttribute to the collection property of the control.

If you use a strongly typed IList implementation for your collection property, and all the objects in the collection are of the same type, you do not need a custom collection editor. In that case, you can rely on the built-in CollectionEditor as the property editor because CollectionEditor infers the object type from the type of the Items property of the IList implementation. You should use a typed collection whenever possible. However, if you use a collection such as ArrayList as the type of a controls' collection property, you need a custom collection editor to specify the collection items' object type.

The ContactCollectionEditor described in this example is used by the Contacts property of the QuickContacts control described in Web Control Collection Property Example. It enables objects of type Contact to be added to the Contacts property through a collection editor user interface (UI). The ContactCollectionEditor class derives fromCollectionEditor and overrides the CreateCollectionItemType method to return the Contact type.

If the collection property of your control contains objects of different types, implement a collection editor similar to the example but override the CreateNewItemTypes method instead of the CreateCollectionItemType method and return the correct item types.

// ContactCollectionEditor.cs
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Reflection;

namespace Samples.AspNet.CS.Controls
{
    public class ContactCollectionEditor : CollectionEditor
    {
        public ContactCollectionEditor(Type type)
            : base(type)
        {
        }

        protected override bool CanSelectMultipleInstances()
        {
            return false;
        }

        protected override Type CreateCollectionItemType()
        {
            return typeof(Contact);
        }
    }
}


 

 For Support