DataBoundControlHelper.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 / DataBoundControlHelper.cs / 1305376 / DataBoundControlHelper.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.Data;
    using System.Security.Permissions; 
    using System.Web.Util;
 
    ///  
    /// Helper class for DataBoundControls and v1 data controls.
    /// This is also used by ControlParameter to find its associated 
    /// control.
    /// 
    internal static class DataBoundControlHelper {
 
        /// 
        /// Walks up the stack of NamingContainers starting at 'control' to find a control with the ID 'controlID'. 
        ///  
        public static Control FindControl(Control control, string controlID) {
            Debug.Assert(control != null, "control should not be null"); 
            Debug.Assert(!String.IsNullOrEmpty(controlID), "controlID should not be empty");
            Control currentContainer = control;
            Control foundControl = null;
 
            if (control == control.Page) {
                // If we get to the Page itself while we're walking up the 
                // hierarchy, just return whatever item we find (if anything) 
                // since we can't walk any higher.
                return control.FindControl(controlID); 
            }

            while (foundControl == null && currentContainer != control.Page) {
                currentContainer = currentContainer.NamingContainer; 
                if (currentContainer == null) {
                    throw new HttpException(SR.GetString(SR.DataBoundControlHelper_NoNamingContainer, control.GetType().Name, control.ID)); 
                } 
                foundControl = currentContainer.FindControl(controlID);
            } 

            return foundControl;
        }
 
        /// 
        // return true if the two string arrays have the same members 
        ///  
        public static bool CompareStringArrays(string[] stringA, string[] stringB) {
            if (stringA == null && stringB == null) { 
                return true;
            }

            if (stringA == null || stringB == null) { 
                return false;
            } 
 
            if (stringA.Length != stringB.Length) {
                return false; 
            }

            for (int i = 0; i < stringA.Length; i++) {
                if (!String.Equals(stringA[i], stringB[i], StringComparison.Ordinal)) { 
                    return false;
                } 
            } 
            return true;
        } 

        // Returns true for types that can be automatically databound in controls such as
        // GridView and DetailsView. Bindable types are simple types, such as primitives, strings,
        // and nullable primitives. 
        public static bool IsBindableType(Type type) {
            if (type == null) { 
                return false; 
            }
            Type underlyingType = Nullable.GetUnderlyingType(type); 
            if (underlyingType != null) {
                // If the type is Nullable then it has an underlying type, in which case
                // we want to check the underlying type for bindability.
                type = underlyingType; 
            }
            return (type.IsPrimitive || 
                   (type == typeof(string)) || 
                   (type == typeof(DateTime)) ||
                   (type == typeof(Decimal)) || 
                   (type == typeof(Guid)) ||
                   // support for new SqlServer 2008 types:
                   (type == typeof(DateTimeOffset)) ||
                   (type == typeof(TimeSpan))); 
        }
 
        internal static void ExtractValuesFromBindableControls(IOrderedDictionary dictionary, Control container) { 
            IBindableControl bindableControl = container as IBindableControl;
            if (bindableControl != null) { 
                bindableControl.ExtractValues(dictionary);
            }
            foreach (Control childControl in container.Controls) {
                ExtractValuesFromBindableControls(dictionary, childControl); 
            }
        } 
 
    }
} 


// 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