//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//------------------------------------------------------------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration;
using System.Web;
using System.Web.Resources;
using System.Web.Security;
using System.Web.UI;
namespace System.Web.UI.WebControls {
///
/// Summary description for DataPagerFieldCollection
///
public class DataPagerFieldCollection : StateManagedCollection {
private DataPager _dataPager;
private static readonly Type[] knownTypes = new Type[] {
typeof(NextPreviousPagerField),
typeof(NumericPagerField),
typeof(TemplatePagerField)
};
public event EventHandler FieldsChanged;
public DataPagerFieldCollection(DataPager dataPager) {
_dataPager = dataPager;
}
///
/// Gets a at the specified index in the
/// collection.
///
[
Browsable(false)
]
public DataPagerField this[int index] {
get {
return ((IList)this)[index] as DataPagerField;
}
}
///
/// Appends a to the collection.
///
public void Add(DataPagerField field) {
((IList)this).Add(field);
}
///
/// Provides a deep copy of the collection. Used mainly by design time dialogs to implement "cancel" rollback behavior.
///
public DataPagerFieldCollection CloneFields(DataPager pager) {
DataPagerFieldCollection fields = new DataPagerFieldCollection(pager);
foreach (DataPagerField field in this) {
fields.Add(field.CloneField());
}
return fields;
}
///
/// Returns whether a DataPagerField is a member of the collection.
///
public bool Contains(DataPagerField 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(DataPagerField[] array, int index) {
((IList)this).CopyTo(array, index);
return;
}
///
/// Creates a known type of DataPagerField.
///
protected override object CreateKnownType(int index) {
switch (index) {
case 0:
return new NextPreviousPagerField();
case 1:
return new NumericPagerField();
case 2:
return new TemplatePagerField();
default:
throw new ArgumentOutOfRangeException(AtlasWeb.PagerFieldCollection_InvalidTypeIndex);
}
}
///
/// Returns an ArrayList of known DataPagerField types.
///
protected override Type[] GetKnownTypes() {
return knownTypes;
}
///
/// Returns the index of the first occurrence of a value in a .
///
public int IndexOf(DataPagerField field) {
return ((IList)this).IndexOf(field);
}
///
/// Inserts a to the collection
/// at the specified index.
///
public void Insert(int index, DataPagerField 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) {
DataPagerField field = value as DataPagerField;
if (field != null) {
field.FieldChanged += new EventHandler(OnFieldChanged);
}
field.SetDataPager(_dataPager);
OnFieldsChanged();
}
///
/// Called when the Remove() method is complete.
///
protected override void OnRemoveComplete(int index, object value) {
DataPagerField field = value as DataPagerField;
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 DataPagerField))
throw new ArgumentException(AtlasWeb.PagerFieldCollection_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(DataPagerField field) {
((IList)this).Remove(field);
}
///
/// Marks a DataPagerField as dirty so that it will record its entire state into view state.
///
protected override void SetDirtyObject(object o) {
((DataPagerField)o).SetDirty();
}
}
}