集合编辑器示例
更新:2007 年 11 月
此示例演示如何创建名为 ContactCollectionEditor 的、用于实现自定义集合编辑器的控件。该示例演示如何指定页开发人员在使用自定义集合编辑器时可以添加到控件集合属性中的对象的准确类型。通过将 EditorAttribute 应用于控件的集合属性,可使集合编辑器与集合属性(或属性的类型)关联。
如果对集合属性使用强类型 IList 实现,并且集合中的所有对象都属于同一类型,则无需使用自定义集合编辑器。在此情况下,可以将内置 CollectionEditor 用作属性编辑器,因为 CollectionEditor 可以根据 IList 实现的 Items 属性的类型来推断对象类型。应尽可能使用类型化的集合。但是,如果使用集合(如 ArrayList)作为控件的集合属性的类型,则需使用自定义集合编辑器来指定集合项的对象类型。
本示例中描述的 ContactCollectionEditor 由 Web 控件集合属性示例中所述的 QuickContacts 控件的 Contacts 属性使用。它使得类型为 Contact 的对象可以通过集合编辑器用户界面 (UI) 添加至 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);
}
}
}
生成和使用示例
使用 Web 控件集合属性示例中列出的 QuickContacts 控件和 Contacts 类来编译 ContactCollectionEditor 编辑器。必须添加对 System.Design 程序集的引用才能进行编译。
有关编译和使用自定义控件示例的更多信息,请参见生成自定义服务器控件示例。