DataControlField.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / UI / WebControls / DataControlField.cs / 1305376 / DataControlField.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Web.UI.WebControls { 
 
    using System;
    using System.Collections; 
    using System.Collections.Specialized;
    using System.ComponentModel;
    using System.Drawing.Design;
 
    /// 
    /// Creates a field and is the base class for all  types. 
    ///  
    [
    TypeConverterAttribute(typeof(ExpandableObjectConverter)), 
    DefaultProperty("HeaderText")
    ]
    public abstract class DataControlField : IStateManager, IDataSourceViewSchemaAccessor {
 
        private TableItemStyle _itemStyle;
        private TableItemStyle _headerStyle; 
        private TableItemStyle _footerStyle; 
        private Style _controlStyle;
        private StateBag _statebag; 
        private bool _trackViewState;
        private bool _sortingEnabled;
        private Control _control;
        private object _dataSourceViewSchema; 

        internal event EventHandler FieldChanged; 
 

 
        /// 
        /// Initializes a new instance of the System.Web.UI.WebControls.Field class.
        /// 
        protected DataControlField() { 
            _statebag = new StateBag();
            _dataSourceViewSchema = null; 
        } 

 
        /// 
        /// Gets or sets the text rendered as the AbbreviatedText in some controls.
        /// 
        [ 
        Localizable(true),
        WebCategory("Accessibility"), 
        DefaultValue(""), 
        WebSysDescription(SR.DataControlField_AccessibleHeaderText)
        ] 
        public virtual string AccessibleHeaderText {
            get {
                object o = ViewState["AccessibleHeaderText"];
                if (o != null) 
                    return(string)o;
                return String.Empty; 
            } 
            set {
                if (!String.Equals(value, ViewState["AccessibleHeaderText"])) { 
                    ViewState["AccessibleHeaderText"] = value;
                    OnFieldChanged();
                }
            } 
        }
 
 
        /// 
        /// Gets the style properties for the controls inside this field. 
        /// 
        [
        WebCategory("Styles"),
        DefaultValue(null), 
        WebSysDescription(SR.DataControlField_ControlStyle),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content), 
        PersistenceMode(PersistenceMode.InnerProperty) 
        ]
        public Style ControlStyle { 
            get {
                if (_controlStyle == null) {
                    _controlStyle = new Style();
                    if (IsTrackingViewState) 
                        ((IStateManager)_controlStyle).TrackViewState();
                } 
                return _controlStyle; 
            }
        } 

        internal Style ControlStyleInternal {
            get {
                return _controlStyle; 
            }
        } 
 
        protected Control Control {
            get { 
                return _control;
            }
        }
 

        ///  
        /// [To be supplied.] 
        /// 
        protected bool DesignMode { 
            get {
                if (_control != null) {
                    return _control.DesignMode;
                } 
                return false;
            } 
        } 

 
        /// 
        /// Gets the style properties for the footer item.
        /// 
        [ 
        WebCategory("Styles"),
        DefaultValue(null), 
        WebSysDescription(SR.DataControlField_FooterStyle), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        PersistenceMode(PersistenceMode.InnerProperty) 
        ]
        public TableItemStyle FooterStyle {
            get {
                if (_footerStyle == null) { 
                    _footerStyle = new TableItemStyle();
                    if (IsTrackingViewState) 
                        ((IStateManager)_footerStyle).TrackViewState(); 
                }
                return _footerStyle; 
            }
        }

        ///  
        /// 
        internal TableItemStyle FooterStyleInternal { 
            get { 
                return _footerStyle;
            } 
        }


        ///  
        ///  Gets or sets the text displayed in the footer of the
        /// System.Web.UI.WebControls.Field. 
        ///  
        [
        Localizable(true), 
        WebCategory("Appearance"),
        DefaultValue(""),
        WebSysDescription(SR.DataControlField_FooterText)
        ] 
        public virtual string FooterText {
            get { 
                object o = ViewState["FooterText"]; 
                if (o != null)
                    return(string)o; 
                return String.Empty;
            }
            set {
                if (!String.Equals(value, ViewState["FooterText"])) { 
                    ViewState["FooterText"] = value;
                    OnFieldChanged(); 
                } 
            }
        } 


        /// 
        /// Gets or sets the URL reference to an image to display 
        /// instead of text on the header of this System.Web.UI.WebControls.Field
        /// . 
        ///  
        [
        WebCategory("Appearance"), 
        DefaultValue(""),
        Editor("System.Web.UI.Design.ImageUrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)),
        UrlProperty(),
        WebSysDescription(SR.DataControlField_HeaderImageUrl) 
        ]
        public virtual string HeaderImageUrl { 
            get { 
                object o = ViewState["HeaderImageUrl"];
                if (o != null) 
                    return(string)o;
                return String.Empty;
            }
            set { 
                if (!String.Equals(value, ViewState["HeaderImageUrl"])) {
                    ViewState["HeaderImageUrl"] = value; 
                    OnFieldChanged(); 
                }
            } 
        }


        ///  
        /// Gets the style properties for the header of the System.Web.UI.WebControls.Field. This property is read-only.
        ///  
        [ 
        WebCategory("Styles"),
        DefaultValue(null), 
        WebSysDescription(SR.DataControlField_HeaderStyle),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        PersistenceMode(PersistenceMode.InnerProperty)
        ] 
        public TableItemStyle HeaderStyle {
            get { 
                if (_headerStyle == null) { 
                    _headerStyle = new TableItemStyle();
                    if (IsTrackingViewState) 
                        ((IStateManager)_headerStyle).TrackViewState();
                }
                return _headerStyle;
            } 
        }
 
        ///  
        /// 
        internal TableItemStyle HeaderStyleInternal { 
            get {
                return _headerStyle;
            }
        } 

 
        ///  
        /// Gets or sets the text displayed in the header of the
        /// System.Web.UI.WebControls.Field. 
        /// 
        [
        Localizable(true),
        WebCategory("Appearance"), 
        DefaultValue(""),
        WebSysDescription(SR.DataControlField_HeaderText) 
        ] 
        public virtual string HeaderText {
            get { 
                object o = ViewState["HeaderText"];
                if (o != null)
                    return(string)o;
                return String.Empty; 
            }
            set { 
                if (!String.Equals(value, ViewState["HeaderText"])) { 
                    ViewState["HeaderText"] = value;
                    OnFieldChanged(); 
                }
            }
        }
 
        /// 
        ///    Gets or sets whether the field is visible in Insert mode.  Turn off for auto-gen'd db fields 
        ///  
        [
            WebCategory("Behavior"), 
            DefaultValue(true),
            WebSysDescription(SR.DataControlField_InsertVisible)
        ]
        public virtual bool InsertVisible { 
            get {
                object o = ViewState["InsertVisible"]; 
                if (o != null) 
                    return (bool)o;
                return true; 
            }
            set {
                object oldValue = ViewState["InsertVisible"];
                if (oldValue == null || value != (bool)oldValue) { 
                    ViewState["InsertVisible"] = value;
                    OnFieldChanged(); 
                } 
            }
        } 


        /// 
        /// Gets the style properties of an item within the System.Web.UI.WebControls.Field. This property is read-only. 
        /// 
        [ 
        WebCategory("Styles"), 
        DefaultValue(null),
        WebSysDescription(SR.DataControlField_ItemStyle), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        PersistenceMode(PersistenceMode.InnerProperty)
        ]
        public TableItemStyle ItemStyle { 
            get {
                if (_itemStyle == null) { 
                    _itemStyle = new TableItemStyle(); 
                    if (IsTrackingViewState)
                        ((IStateManager)_itemStyle).TrackViewState(); 
                }
                return _itemStyle;
            }
        } 

        ///  
        ///  
        internal TableItemStyle ItemStyleInternal {
            get { 
                return _itemStyle;
            }
        }
 

        [ 
        WebCategory("Behavior"), 
        DefaultValue(true),
        WebSysDescription(SR.DataControlField_ShowHeader) 
        ]
        public virtual bool ShowHeader {
            get {
                object o = ViewState["ShowHeader"]; 
                if (o != null) {
                    return (bool)o; 
                } 
                return true;
            } 
            set {
                object oldValue = ViewState["ShowHeader"];
                if (oldValue == null || (bool)oldValue != value) {
                    ViewState["ShowHeader"] = value; 
                    OnFieldChanged();
                } 
            } 
        }
 

        /// 
        /// Gets or sets the expression used when this field is used to sort the data source> by.
        ///  
        [
        WebCategory("Behavior"), 
        DefaultValue(""), 
        TypeConverter("System.Web.UI.Design.DataSourceViewSchemaConverter, " + AssemblyRef.SystemDesign),
        WebSysDescription(SR.DataControlField_SortExpression) 
        ]
        public virtual string SortExpression {
            get {
                object o = ViewState["SortExpression"]; 
                if (o != null)
                    return(string)o; 
                return String.Empty; 
            }
            set { 
                if (!String.Equals(value, ViewState["SortExpression"])) {
                    ViewState["SortExpression"] = value;
                    OnFieldChanged();
                } 
            }
        } 
 

        ///  
        /// Gets the statebag for the System.Web.UI.WebControls.Field. This property is read-only.
        /// 
        protected StateBag ViewState {
            get { 
                return _statebag;
            } 
        } 

 
        /// 
        /// Gets or sets a value to indicate whether the System.Web.UI.WebControls.Field is visible.
        /// 
        [ 
        WebCategory("Behavior"),
        DefaultValue(true), 
        WebSysDescription(SR.DataControlField_Visible) 
        ]
        public bool Visible { 
            get {
                object o = ViewState["Visible"];
                if (o != null)
                    return(bool)o; 
                return true;
            } 
            set { 
                object oldValue = ViewState["Visible"];
                if (oldValue == null || value != (bool)oldValue) { 
                    ViewState["Visible"] = value;
                    OnFieldChanged();
                }
            } 
        }
 
        protected internal DataControlField CloneField() { 
            DataControlField newField = CreateField();
            CopyProperties(newField); 
            return newField;
        }

        protected virtual void CopyProperties(DataControlField newField) { 
            newField.AccessibleHeaderText = AccessibleHeaderText;
            newField.ControlStyle.CopyFrom(ControlStyle); 
            newField.FooterStyle.CopyFrom(FooterStyle); 
            newField.HeaderStyle.CopyFrom(HeaderStyle);
            newField.ItemStyle.CopyFrom(ItemStyle); 
            newField.FooterText = FooterText;
            newField.HeaderImageUrl = HeaderImageUrl;
            newField.HeaderText = HeaderText;
            newField.InsertVisible = InsertVisible; 
            newField.ShowHeader = ShowHeader;
            newField.SortExpression = SortExpression; 
            newField.Visible = Visible; 
        }
 
        protected abstract DataControlField CreateField();


        ///  
        /// Extracts the value of the databound cell and inserts the value into the given dictionary
        ///  
        public virtual void ExtractValuesFromCell(IOrderedDictionary dictionary, DataControlFieldCell cell, DataControlRowState rowState, bool includeReadOnly) { 
            return;
        } 


        /// 
        ///  
        public virtual bool Initialize(bool sortingEnabled, Control control) {
            _sortingEnabled = sortingEnabled; 
            _control = control; 
            return false;
        } 


        /// 
        /// Initializes a cell in the System.Web.UI.WebControls.Field. 
        /// 
        public virtual void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex) { 
            switch (cellType) { 
                case DataControlCellType.Header:
                    { 
                        WebControl headerControl = null;
                        string sortExpression = SortExpression;
                        bool sortableHeader = (_sortingEnabled && sortExpression.Length > 0);
 
                        string headerImageUrl = HeaderImageUrl;
                        string headerText = HeaderText; 
                        if (headerImageUrl.Length != 0) { 
                            if (sortableHeader) {
                                ImageButton sortButton; 
                                IPostBackContainer container = _control as IPostBackContainer;
                                if (container != null) {
                                    sortButton = new DataControlImageButton(container);
                                    ((DataControlImageButton)sortButton).EnableCallback(null);  // no command argument for the callback uses Sort 
                                }
                                else { 
                                    sortButton = new ImageButton(); 
                                }
 
                                sortButton.ImageUrl = HeaderImageUrl;
                                sortButton.CommandName = DataControlCommands.SortCommandName;
                                sortButton.CommandArgument = sortExpression;
                                if (!(sortButton is DataControlImageButton)) { 
                                    sortButton.CausesValidation = false;
                                } 
                                sortButton.AlternateText = headerText; 
                                headerControl = sortButton;
                            } 
                            else {
                                Image headerImage = new Image();

                                headerImage.ImageUrl = headerImageUrl; 
                                headerControl = headerImage;
                                headerImage.AlternateText = headerText; 
                            } 
                        }
                        else { 
                            if (sortableHeader) {
                                LinkButton sortButton;
                                IPostBackContainer container = _control as IPostBackContainer;
                                if (container != null) { 
                                    sortButton = new DataControlLinkButton(container);
                                    ((DataControlLinkButton)sortButton).EnableCallback(null);   // no command argument for the callback uses Sort 
                                } 
                                else {
                                    sortButton = new LinkButton(); 
                                }

                                sortButton.Text = headerText;
                                sortButton.CommandName = DataControlCommands.SortCommandName; 
                                sortButton.CommandArgument = sortExpression;
                                if (!(sortButton is DataControlLinkButton)) { 
                                    sortButton.CausesValidation = false; 
                                }
                                headerControl = sortButton; 
                            }
                            else {
                                if (headerText.Length == 0) {
                                    // the browser does not render table borders for cells with nothing 
                                    // in their content, so we add a non-breaking space.
                                    headerText = " "; 
                                } 
                                cell.Text = headerText;
                            } 
                        }

                        if (headerControl != null) {
                            cell.Controls.Add(headerControl); 
                        }
                    } 
                    break; 

                case DataControlCellType.Footer: 
                    {
                        string footerText = FooterText;
                        if (footerText.Length == 0) {
                            // the browser does not render table borders for cells with nothing 
                            // in their content, so we add a non-breaking space.
                            footerText = " "; 
                        } 

                        cell.Text = footerText; 
                    }
                    break;
            }
        } 

 
        ///  
        /// Determines if the System.Web.UI.WebControls.Field is marked to save its state.
        ///  
        protected bool IsTrackingViewState {
            get {
                return _trackViewState;
            } 
        }
 
 
        /// 
        /// Loads the state of the System.Web.UI.WebControls.Field. 
        /// 
        protected virtual void LoadViewState(object savedState) {
            if (savedState != null) {
                object[] myState = (object[])savedState; 

                if (myState[0] != null) 
                    ((IStateManager)ViewState).LoadViewState(myState[0]); 
                if (myState[1] != null)
                    ((IStateManager)ItemStyle).LoadViewState(myState[1]); 
                if (myState[2] != null)
                    ((IStateManager)HeaderStyle).LoadViewState(myState[2]);
                if (myState[3] != null)
                    ((IStateManager)FooterStyle).LoadViewState(myState[3]); 
            }
        } 
 

        ///  
        /// Raises the FieldChanged event for a System.Web.UI.WebControls.Field.
        /// 
        protected virtual void OnFieldChanged() {
            if (FieldChanged != null) { 
                FieldChanged(this, EventArgs.Empty);
            } 
        } 

 
        /// 
        /// Saves the current state of the System.Web.UI.WebControls.Field.
        /// 
        protected virtual object SaveViewState() { 
            object propState = ((IStateManager)ViewState).SaveViewState();
            object itemStyleState = (_itemStyle != null) ? ((IStateManager)_itemStyle).SaveViewState() : null; 
            object headerStyleState = (_headerStyle != null) ? ((IStateManager)_headerStyle).SaveViewState() : null; 
            object footerStyleState = (_footerStyle != null) ? ((IStateManager)_footerStyle).SaveViewState() : null;
            object controlStyleState = (_controlStyle != null) ? ((IStateManager)_controlStyle).SaveViewState() : null; 

            if ((propState != null) ||
                (itemStyleState != null) ||
                (headerStyleState != null) || 
                (footerStyleState != null) ||
                (controlStyleState != null)) { 
                return new object[5] { 
                    propState,
                    itemStyleState, 
                    headerStyleState,
                    footerStyleState,
                    controlStyleState
                }; 
            }
 
            return null; 
        }
 
        internal void SetDirty() {
            _statebag.SetDirty(true);
            if (_itemStyle != null) {
                _itemStyle.SetDirty(); 
            }
            if (_headerStyle != null) { 
                _headerStyle.SetDirty(); 
            }
            if (_footerStyle != null) { 
                _footerStyle.SetDirty();
            }
            if (_controlStyle != null) {
                _controlStyle.SetDirty(); 
            }
        } 
 

        ///  
        /// 
        /// Return a textual representation of the column for UI-display purposes.
        /// 
        public override string ToString() { 
            string headerText = HeaderText.Trim();
            return headerText.Length > 0 ? headerText : GetType().Name; 
        } 

 
        /// 
        /// Marks the starting point to begin tracking and saving changes to the
        /// control as part of the control viewstate.
        ///  
        protected virtual void TrackViewState() {
            _trackViewState = true; 
            ((IStateManager)ViewState).TrackViewState(); 
            if (_itemStyle != null)
                ((IStateManager)_itemStyle).TrackViewState(); 
            if (_headerStyle != null)
                ((IStateManager)_headerStyle).TrackViewState();
            if (_footerStyle != null)
                ((IStateManager)_footerStyle).TrackViewState(); 
            if (_controlStyle != null)
                ((IStateManager)_controlStyle).TrackViewState(); 
        } 

        ///  
        /// Override with an empty body if the field's controls all support callback.
        ///  Otherwise, override and throw a useful error message about why the field can't support callbacks.
        /// 
        public virtual void ValidateSupportsCallback() { 
            throw new NotSupportedException(SR.GetString(SR.DataControlField_CallbacksNotSupported, Control.ID));
        } 
 

        ///  
        /// 
        /// Return true if tracking state changes.
        /// 
        bool IStateManager.IsTrackingViewState { 
            get {
                return IsTrackingViewState; 
            } 
        }
 

        /// 
        /// 
        /// Load previously saved state. 
        /// 
        void IStateManager.LoadViewState(object state) { 
            LoadViewState(state); 
        }
 

        /// 
        /// 
        /// Start tracking state changes. 
        /// 
        void IStateManager.TrackViewState() { 
            TrackViewState(); 
        }
 

        /// 
        /// 
        /// Return object containing state changes. 
        /// 
        object IStateManager.SaveViewState() { 
            return SaveViewState(); 
        }
 
        #region IDataSourceViewSchemaAccessor implementation

        /// 
        object IDataSourceViewSchemaAccessor.DataSourceViewSchema { 
            get {
                return _dataSourceViewSchema; 
            } 
            set {
                _dataSourceViewSchema = value; 
            }
        }
        #endregion
    } 
}
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK