File: UI\WebControls\TableRow.cs
Project: ndp\fx\src\xsp\system\Web\System.Web.csproj (System.Web)
//------------------------------------------------------------------------------
// <copyright file="TableRow.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
 
namespace System.Web.UI.WebControls {
 
    using System;
    using System.ComponentModel;
    using System.Globalization;
    using System.Web;
    using System.Web.UI;
    using System.Web.Util;
 
    /// <devdoc>
    ///    <para> Encapsulates a row
    ///       within a table.</para>
    /// </devdoc>
    [
    Bindable(false),
    DefaultProperty("Cells"),
    ParseChildren(true, "Cells"),
    ToolboxItem(false)
    ]
    [Designer("System.Web.UI.Design.WebControls.PreviewControlDesigner, " + AssemblyRef.SystemDesign)]
    public class TableRow : WebControl {
 
        TableCellCollection cells;
 
 
        /// <devdoc>
        ///    <para>
        ///       Initializes a new instance of the <see cref='System.Web.UI.WebControls.TableRow'/> class.
        ///    </para>
        /// </devdoc>
        public TableRow() : base(HtmlTextWriterTag.Tr) {
            PreventAutoID();
        }
 
 
        /// <devdoc>
        ///    <para> Indicates the table cell collection of the table
        ///       row. This property is read-only.</para>
        /// </devdoc>
        [
        MergableProperty(false),
        WebSysDescription(SR.TableRow_Cells),
        PersistenceMode(PersistenceMode.InnerDefaultProperty)
        ]
        public virtual TableCellCollection Cells {
            get {
                if (cells == null)
                    cells = new TableCellCollection(this);
                return cells;
            }
        }
 
 
        /// <devdoc>
        ///    <para> Indicates the horizontal alignment of the content within the table cells.</para>
        /// </devdoc>
        [
        WebCategory("Layout"),
        DefaultValue(HorizontalAlign.NotSet),
        WebSysDescription(SR.TableItem_HorizontalAlign)
        ]
        public virtual HorizontalAlign HorizontalAlign {
            get {
                if (ControlStyleCreated == false) {
                    return HorizontalAlign.NotSet;
                }
                return ((TableItemStyle)ControlStyle).HorizontalAlign;
            }
            set {
                ((TableItemStyle)ControlStyle).HorizontalAlign = value;
            }
        }
 
        public override bool SupportsDisabledAttribute {
            get {
                return RenderingCompatibility < VersionUtil.Framework40;
            }
        }
 
        [
        WebCategory("Accessibility"),
        DefaultValue(TableRowSection.TableBody),
        WebSysDescription(SR.TableRow_TableSection)
        ]
        public virtual TableRowSection TableSection {
            get {
                object o = ViewState["TableSection"];
                return((o == null) ? TableRowSection.TableBody : (TableRowSection)o);
            }
            set {
                if (value < TableRowSection.TableHeader || value > TableRowSection.TableFooter) {
                    throw new ArgumentOutOfRangeException("value");
                }
                ViewState["TableSection"] = value;
                if (value != TableRowSection.TableBody) {
                    Control parent = Parent;
                    if (parent != null) {
                        Table parentTable = parent as Table;
                        if (parentTable != null) {
                            parentTable.HasRowSections = true;
                        }
                    }
                }
            }
        }
 
 
        /// <devdoc>
        ///    <para>Indicates the vertical alignment of the content within the cell.</para>
        /// </devdoc>
        [
        WebCategory("Layout"),
        DefaultValue(VerticalAlign.NotSet),
        WebSysDescription(SR.TableItem_VerticalAlign)
        ]
        public virtual VerticalAlign VerticalAlign {
            get {
                if (ControlStyleCreated == false) {
                    return VerticalAlign.NotSet;
                }
                return ((TableItemStyle)ControlStyle).VerticalAlign;
            }
            set {
                ((TableItemStyle)ControlStyle).VerticalAlign = value;
            }
        }
 
 
        /// <internalonly/>
        /// <devdoc>
        ///    <para>A protected method. Creates a table item control style.</para>
        /// </devdoc>
        protected override Style CreateControlStyle() {
            return new TableItemStyle(ViewState);
        }
 
 
        /// <devdoc>
        ///    <para>[To be supplied.]</para>
        /// </devdoc>
        protected override ControlCollection CreateControlCollection() {
            return new CellControlCollection(this);
        }
 
 
        /// <devdoc>
        ///    <para>[To be supplied.]</para>
        /// </devdoc>
        protected class CellControlCollection : ControlCollection {
 
            internal CellControlCollection (Control owner) : base(owner) {
            }
 
 
            /// <devdoc>
            /// <para>Adds the specified <see cref='System.Web.UI.Control'/> object to the collection. The new control is added
            ///    to the end of the array.</para>
            /// </devdoc>
            public override void Add(Control child) {
                if (child is TableCell)
                    base.Add(child);
                else
                    throw new ArgumentException(SR.GetString(SR.Cannot_Have_Children_Of_Type, "TableRow", child.GetType().Name.ToString(CultureInfo.InvariantCulture))); // throw an exception here
            }
 
 
            /// <devdoc>
            /// <para>Adds the specified <see cref='System.Web.UI.Control'/> object to the collection. The new control is added
            ///    to the array at the specified index location.</para>
            /// </devdoc>
            public override void AddAt(int index, Control child) {
                if (child is TableCell)
                    base.AddAt(index, child);
                else
                    throw new ArgumentException(SR.GetString(SR.Cannot_Have_Children_Of_Type, "TableRow", child.GetType().Name.ToString(CultureInfo.InvariantCulture))); // throw an exception here
            }
        } // class CellControlCollection
 
    }
}