DataKey.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 / DataKey.cs / 1305376 / DataKey.cs

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

namespace System.Web.UI.WebControls { 
 
    using System;
    using System.Collections; 
    using System.Collections.Specialized;
    using System.Diagnostics.CodeAnalysis;

    ///  
    /// 
    public class DataKey : IStateManager, IEquatable { 
 
        private IOrderedDictionary _keyTable;
        private bool _isTracking; 
        private string[] _keyNames;


        public DataKey(IOrderedDictionary keyTable) { 
            _keyTable = keyTable;
        } 
 
        public DataKey(IOrderedDictionary keyTable, string[] keyNames)
            : this(keyTable) { 
            _keyNames = keyNames;
        }

 
        /// 
        /// Inheritable overridable implementation of IsTrackingViewState 
        ///  
        protected virtual bool IsTrackingViewState {
            get { 
                return _isTracking;
            }
        }
 
        public virtual object this[int index] {
            get { 
                if (_keyTable != null) { 
                    return _keyTable[index];
                } 
                return null;
            }
        }
 
        public virtual object this[string name] {
            get { 
                if (_keyTable != null) { 
                    return _keyTable[name];
                } 
                return null;
            }
        }
 

        public virtual object Value { 
            get { 
                if ((_keyTable != null)  && (_keyTable.Count > 0)) {
                    return _keyTable[0]; 
                }
                return null;
            }
        } 

        public virtual IOrderedDictionary Values { 
            get { 
                if (_keyTable == null) {
                    return null; 
                }

                if (_keyTable is OrderedDictionary) {
                    return ((OrderedDictionary)_keyTable).AsReadOnly(); 
                }
 
                // don't return the actual table because we don't want the user to mess with it. 
                if (_keyTable is ICloneable) {
                    return (IOrderedDictionary)((ICloneable)_keyTable).Clone(); 
                }
                OrderedDictionary table = new OrderedDictionary();

                foreach (DictionaryEntry entry in _keyTable) { 
                    table.Add(entry.Key, entry.Value);
                } 
                return table.AsReadOnly(); 
            }
        } 

        /// 
        /// Inheritable overridable implementation of LoadViewState
        ///  
        protected virtual void LoadViewState(object state) {
            if (state != null) { 
                if (_keyNames != null) { 
                    object[] myState = (object[])state;
                    // if we have key names, then we only stored values. 
                    if (myState[0] != null) {
                        for (int i = 0; i < myState.Length && i < _keyNames.Length; i++) {
                            _keyTable.Add(_keyNames[i], myState[i]);
                        } 
                    }
                } 
                else { 
                    if (state != null) {
                        ArrayList stateArrayList = state as ArrayList; 
                        if (stateArrayList == null) {
                            throw new HttpException(SR.GetString(SR.ViewState_InvalidViewState));
                        }
                        OrderedDictionaryStateHelper.LoadViewState(_keyTable, stateArrayList); 
                    }
                } 
            } 
        }
 

        /// 
        /// Inheritable overridable implementation of SaveViewState
        ///  
        protected virtual object SaveViewState() {
            int count = _keyTable.Count; 
            if (count > 0) { 
                object myState;
                if (_keyNames != null) { 
                    // if we have key names, then we only have to store values.
                    myState = new object[count];

                    for (int i = 0; i < count; i++) { 
                        ((object[])myState)[i] = _keyTable[i];
                    } 
                } 
                else {
                    myState = OrderedDictionaryStateHelper.SaveViewState(_keyTable); 
                }

                return myState;
            } 
            return null;
        } 
 

        ///  
        /// Inheritable overridable implementation of TrackViewState
        /// 
        protected virtual void TrackViewState() {
            _isTracking = true; 
        }
 
        #region IStateManager implementation 

        ///  
        bool IStateManager.IsTrackingViewState {
            get {
                return IsTrackingViewState;
            } 
        }
 
 
        /// 
        void IStateManager.LoadViewState(object state) { 
            LoadViewState(state);
        }

 
        /// 
        object IStateManager.SaveViewState() { 
            return SaveViewState(); 
        }
 

        /// 
        void IStateManager.TrackViewState() {
            TrackViewState(); 
        }
        #endregion 
 
        #region IEquatable Members
 
        [SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")]
        public bool Equals(DataKey other) {
            if (other == null) {
                return false; 
            }
 
            string[] aKeys = _keyNames; 
            string[] bKeys = other._keyNames;
 
            if (aKeys == null && _keyTable != null) {
                aKeys = new string[_keyTable.Count];
                _keyTable.Keys.CopyTo(aKeys, 0);
            } 

            if (bKeys == null && _keyTable != null) { 
                bKeys = new string[other._keyTable.Count]; 
                other._keyTable.Keys.CopyTo(bKeys, 0);
            } 

            // Compare the keys array
            bool hasSameKeyNames = DataBoundControlHelper.CompareStringArrays(aKeys, bKeys);
            if (hasSameKeyNames) { 
                if (aKeys != null && bKeys != null) {
                    foreach (string key in aKeys) { 
                        if (!Object.Equals(this[key], other[key])) { 
                            return false;
                        } 
                    }
                }
                return true;
            } 

            return false; 
        } 

        #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