DefaultAutoFieldGenerator.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / DynamicData / DynamicData / DefaultAutoFieldGenerator.cs / 1305376 / DefaultAutoFieldGenerator.cs

                            namespace System.Web.DynamicData { 
    using System.Collections;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Web.DynamicData.Util; 
    using System.Web.UI;
    using System.Web.UI.WebControls; 
 
    public class DefaultAutoFieldGenerator : IAutoFieldGenerator {
        private IMetaTable _metaTable; 

        public DefaultAutoFieldGenerator(MetaTable table)
            : this((IMetaTable)table) {
        } 

        internal DefaultAutoFieldGenerator(IMetaTable table) { 
            if (table == null) { 
                throw new ArgumentNullException("table");
            } 
            _metaTable = table;
        }

        public ICollection GenerateFields(Control control) { 
            DataBoundControlMode mode = GetMode(control);
            ContainerType containerType = GetControlContainerType(control); 
 
            // Auto-generate fields from metadata.
            List fields = new List(); 
            foreach (MetaColumn column in _metaTable.GetScaffoldColumns(mode, containerType)) {
                fields.Add(CreateField(column, containerType, mode));
            }
 
            return fields;
        } 
 
        protected virtual DynamicField CreateField(MetaColumn column, ContainerType containerType, DataBoundControlMode mode) {
            string headerText = (containerType == ContainerType.List ? column.ShortDisplayName : column.DisplayName); 

            var field = new DynamicField() {
                DataField = column.Name,
                HeaderText = headerText 
            };
            // Turn wrapping off by default so that error messages don't show up on the next line. 
            field.ItemStyle.Wrap = false; 

            return field; 
        }

        internal static ContainerType GetControlContainerType(Control control) {
#if !ORYX_VNEXT 
            if (control is IDataBoundListControl || control is Repeater) {
                return ContainerType.List; 
            } else if (control is IDataBoundItemControl) { 
                return ContainerType.Item;
            } 
#else
            if (control is GridView || control is ListView || control is Repeater) {
                return ContainerType.List;
            } 

            if (control is FormView || control is DetailsView) { 
                return ContainerType.Item; 
            }
#endif 
            return ContainerType.List;
        }

        internal static DataBoundControlMode GetMode(Control control) { 
#if ORYX_VNEXT
            return DataControlHelper.GetControlAdapter(control).Mode; 
#else 
            // Only item controls have distinct modes
            IDataBoundItemControl itemControl = control as IDataBoundItemControl; 
            if (itemControl != null && GetControlContainerType(control) != ContainerType.List) {
                return itemControl.Mode;
            }
 
            return DataBoundControlMode.ReadOnly;
#endif 
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
namespace System.Web.DynamicData { 
    using System.Collections;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Web.DynamicData.Util; 
    using System.Web.UI;
    using System.Web.UI.WebControls; 
 
    public class DefaultAutoFieldGenerator : IAutoFieldGenerator {
        private IMetaTable _metaTable; 

        public DefaultAutoFieldGenerator(MetaTable table)
            : this((IMetaTable)table) {
        } 

        internal DefaultAutoFieldGenerator(IMetaTable table) { 
            if (table == null) { 
                throw new ArgumentNullException("table");
            } 
            _metaTable = table;
        }

        public ICollection GenerateFields(Control control) { 
            DataBoundControlMode mode = GetMode(control);
            ContainerType containerType = GetControlContainerType(control); 
 
            // Auto-generate fields from metadata.
            List fields = new List(); 
            foreach (MetaColumn column in _metaTable.GetScaffoldColumns(mode, containerType)) {
                fields.Add(CreateField(column, containerType, mode));
            }
 
            return fields;
        } 
 
        protected virtual DynamicField CreateField(MetaColumn column, ContainerType containerType, DataBoundControlMode mode) {
            string headerText = (containerType == ContainerType.List ? column.ShortDisplayName : column.DisplayName); 

            var field = new DynamicField() {
                DataField = column.Name,
                HeaderText = headerText 
            };
            // Turn wrapping off by default so that error messages don't show up on the next line. 
            field.ItemStyle.Wrap = false; 

            return field; 
        }

        internal static ContainerType GetControlContainerType(Control control) {
#if !ORYX_VNEXT 
            if (control is IDataBoundListControl || control is Repeater) {
                return ContainerType.List; 
            } else if (control is IDataBoundItemControl) { 
                return ContainerType.Item;
            } 
#else
            if (control is GridView || control is ListView || control is Repeater) {
                return ContainerType.List;
            } 

            if (control is FormView || control is DetailsView) { 
                return ContainerType.Item; 
            }
#endif 
            return ContainerType.List;
        }

        internal static DataBoundControlMode GetMode(Control control) { 
#if ORYX_VNEXT
            return DataControlHelper.GetControlAdapter(control).Mode; 
#else 
            // Only item controls have distinct modes
            IDataBoundItemControl itemControl = control as IDataBoundItemControl; 
            if (itemControl != null && GetControlContainerType(control) != ContainerType.List) {
                return itemControl.Mode;
            }
 
            return DataBoundControlMode.ReadOnly;
#endif 
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.

                        

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