//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//------------------------------------------------------------------------------
namespace System.Web.UI.WebControls {
using System;
using System.Collections;
using System.ComponentModel;
///
/// Represents the collection of fields to be displayed in
/// a data bound control that uses fields.
///
public sealed class DataControlFieldCollection : StateManagedCollection {
private static readonly Type[] knownTypes = new Type[] {
typeof(BoundField),
typeof(ButtonField),
typeof(CheckBoxField),
typeof(CommandField),
typeof(HyperLinkField),
typeof(ImageField),
typeof(TemplateField)
};
public event EventHandler FieldsChanged;
///
/// Gets a at the specified index in the
/// collection.
///
[
Browsable(false)
]
public DataControlField this[int index] {
get {
return ((IList)this)[index] as DataControlField;
}
}
///
/// Appends a to the collection.
///
public void Add(DataControlField field) {
((IList)this).Add(field);
}
///
/// Provides a deep copy of the collection. Used mainly by design time dialogs to implement "cancel" rollback behavior.
///
public DataControlFieldCollection CloneFields() {
DataControlFieldCollection fields = new DataControlFieldCollection();
foreach (DataControlField field in this) {
fields.Add(field.CloneField());
}
return fields;
}
///
/// Returns whether a DataControlField is a member of the collection.
///
public bool Contains(DataControlField field) {
return ((IList)this).Contains(field);
}
///
/// Copies the contents of the entire collection into an appending at
/// the specified index of the .
///
public void CopyTo(DataControlField[] array, int index) {
((IList)this).CopyTo(array, index);
return;
}
///
/// Creates a known type of DataControlField.
///
protected override object CreateKnownType(int index) {
switch (index) {
case 0:
return new BoundField();
case 1:
return new ButtonField();
case 2:
return new CheckBoxField();
case 3:
return new CommandField();
case 4:
return new HyperLinkField();
case 5:
return new ImageField();
case 6:
return new TemplateField();
default:
throw new ArgumentOutOfRangeException(SR.GetString(SR.DataControlFieldCollection_InvalidTypeIndex));
}
}
///
/// Returns an ArrayList of known DataControlField types.
///
protected override Type[] GetKnownTypes() {
return knownTypes;
}
///
/// Returns the index of the first occurrence of a value in a .
///
public int IndexOf(DataControlField field) {
return ((IList)this).IndexOf(field);
}
///
/// Inserts a to the collection
/// at the specified index.
///
public void Insert(int index, DataControlField field) {
((IList)this).Insert(index, field);
}
///
/// Called when the Clear() method is complete.
///
protected override void OnClearComplete() {
OnFieldsChanged();
}
///
///
void OnFieldChanged(object sender, EventArgs e) {
OnFieldsChanged();
}
///
///
void OnFieldsChanged() {
if (FieldsChanged != null) {
FieldsChanged(this, EventArgs.Empty);
}
}
///
/// Called when the Insert() method is complete.
///
protected override void OnInsertComplete(int index, object value) {
DataControlField field = value as DataControlField;
if (field != null) {
field.FieldChanged += new EventHandler(OnFieldChanged);
}
OnFieldsChanged();
}
///
/// Called when the Remove() method is complete.
///
protected override void OnRemoveComplete(int index, object value) {
DataControlField field = value as DataControlField;
if (field != null) {
field.FieldChanged -= new EventHandler(OnFieldChanged);
}
OnFieldsChanged();
}
///
/// Validates that an object is a HotSpot.
///
protected override void OnValidate(object o) {
base.OnValidate(o);
if (!(o is DataControlField))
throw new ArgumentException(SR.GetString(SR.DataControlFieldCollection_InvalidType));
}
///
/// Removes a from the collection at the specified
/// index.
///
public void RemoveAt(int index) {
((IList)this).RemoveAt(index);
}
///
/// Removes the specified from the collection.
///
public void Remove(DataControlField field) {
((IList)this).Remove(field);
}
///
/// Marks a DataControlField as dirty so that it will record its entire state into view state.
///
protected override void SetDirtyObject(object o) {
((DataControlField)o).SetDirty();
}
}
}