Поделиться через


Пример редактора коллекций

Обновлен: Ноябрь 2007

В этом примере показано, как создать элемент управления с именем ContactCollectionEditor, который реализует пользовательский редактор коллекций. В примере показано, как указать точный тип объекта, который разработчик страницы может добавить к свойству коллекции элементов управления при использовании пользовательского редактора коллекций. Свяжите редактор коллекций со свойством коллекции (или типом свойства), применив объект EditorAttribute к свойству коллекции элемента управления.

Если используется строго типизированная реализация IList для свойства коллекции и все объекты в коллекции имеют один и тот же тип, пользовательский редактор коллекций не требуется. В этом случае можно использовать встроенный объект CollectionEditor как редактор свойств, так как объект CollectionEditor выводит тип объекта из типа свойства Items реализации IList. Рекомендуется использовать типизированную коллекцию, где это возможно. Однако если используется коллекция, такая как ArrayList, в качестве типа свойства коллекции элементов управления, требуется пользовательский редактор коллекций, чтобы указать тип объекта элементов коллекции.

Объект ContactCollectionEditor, описанный в этом примере, используется свойством Contacts элемента управления QuickContacts, описанного в разделе Пример свойства-коллекции веб-элементов. Он позволяет добавлять объекты типа Contact к свойству Contacts через пользовательский интерфейс редактора коллекций. Класс ContactCollectionEditor происходит от CollectionEditor и переопределяет метод CreateCollectionItemType, чтобы возвратить тип Contact.

Если свойство коллекции элемента управления содержит объекты других типов, реализация редактора коллекций будет такой же, как в этом примере, но с переопределением метода CreateNewItemTypes вместо метода CreateCollectionItemType и возвращением правильных типов элементов.

Полный текст кода ContactCollectionEditor

' ContactCollectionEditor.vb
Imports System
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Reflection

Namespace Samples.AspNet.VB.Controls
    Public Class ContactCollectionEditor
        Inherits CollectionEditor

        Public Sub New(ByVal newType As Type)
            MyBase.new(newType)
        End Sub

        Protected Overrides Function CanSelectMultipleInstances() _
        As Boolean
            Return False
        End Function

        Protected Overrides Function CreateCollectionItemType() As Type
            Return GetType(Contact)
        End Function
    End Class
End Namespace
// 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);
        }
    }
}

Построение и использование примера

Скомпилируйте редактор ContactCollectionEditor с элементом управления QuickContacts и классом Contacts, указанным в разделе Пример свойства-коллекции веб-элементов. Для компиляции необходимо добавить ссылку на сборку System.Design.

Дополнительные сведения о компиляции и использовании примеров пользовательских элементов управления см. в разделе Примеры связывания пользовательского серверного элемента управления.

См. также

Основные понятия

Пример свойства-коллекции веб-элементов

Примеры связывания пользовательского серверного элемента управления

Другие ресурсы

Разработка пользовательских серверных элементов управления ASP.NET