//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ namespace System.Web.UI.WebControls { using System; using System.Collections; using System.ComponentModel; using System.Drawing.Design; using System.Web; using System.Web.UI; /// /// Encapsulates the collection of objects within a control. /// [ Editor("System.Web.UI.Design.WebControls.TableRowsCollectionEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)) ] public sealed class TableRowCollection : IList { /// /// A protected field of type . Represents the collection internally. /// private Table owner; /// /// internal TableRowCollection(Table owner) { this.owner = owner; } /// /// Gets the /// count of in the collection. /// public int Count { get { if (owner.HasControls()) { return owner.Controls.Count; } return 0; } } /// /// /// Gets a referenced by the /// specified ordinal index value. /// /// public TableRow this[int index] { get { return(TableRow)owner.Controls[index]; } } /// /// /// Adds the specified to the end of the collection. /// /// public int Add(TableRow row) { AddAt(-1, row); return owner.Controls.Count - 1; } /// /// /// Adds the specified to the collection at the specified /// index location. /// /// public void AddAt(int index, TableRow row) { owner.Controls.AddAt(index, row); if (row.TableSection != TableRowSection.TableBody) { owner.HasRowSections = true; } } /// /// public void AddRange(TableRow[] rows) { if (rows == null) { throw new ArgumentNullException("rows"); } foreach(TableRow row in rows) { Add(row); } } /// /// Removes all controls from the collection. /// public void Clear() { if (owner.HasControls()) { owner.Controls.Clear(); owner.HasRowSections = false; } } /// /// Returns an ordinal index value that denotes the position of the specified /// within the collection. /// public int GetRowIndex(TableRow row) { if (owner.HasControls()) { return owner.Controls.IndexOf(row); } return -1; } /// /// /// Returns an enumerator of all controls within the /// collection. /// /// public IEnumerator GetEnumerator() { return owner.Controls.GetEnumerator(); } /// /// Copies contents from the collection to the specified with the /// specified starting index. /// public void CopyTo(Array array, int index) { for (IEnumerator e = this.GetEnumerator(); e.MoveNext();) array.SetValue(e.Current, index++); } /// /// /// Gets the object that can be used to synchronize access to the collection. In /// this case, it is the collection itself. /// /// public Object SyncRoot { get { return this;} } /// /// /// Gets a value indicating whether the collection is read-only. /// /// public bool IsReadOnly { get { return false;} } /// /// /// Gets a value indicating whether access to the collection is synchronized /// (thread-safe). /// /// public bool IsSynchronized { get { return false;} } /// /// Removes the specified from the collection. /// public void Remove(TableRow row) { owner.Controls.Remove(row); } /// /// Removes the from the collection at the specified /// index location. /// public void RemoveAt(int index) { owner.Controls.RemoveAt(index); } // IList implementation, required by collection editor /// object IList.this[int index] { get { return owner.Controls[index]; } set { RemoveAt(index); AddAt(index, (TableRow)value); } } /// bool IList.IsFixedSize { get { return false; } } /// int IList.Add(object o) { return Add((TableRow) o); } /// bool IList.Contains(object o) { return owner.Controls.Contains((TableRow)o); } /// int IList.IndexOf(object o) { return owner.Controls.IndexOf((TableRow)o); } /// void IList.Insert(int index, object o) { AddAt(index, (TableRow)o); } /// void IList.Remove(object o) { Remove((TableRow)o); } } }