File: UI\WebControls\Expressions\DataSourceExpression.cs
Project: ndp\fx\src\xsp\system\Extensions\System.Web.Extensions.csproj (System.Web.Extensions)
namespace System.Web.UI.WebControls.Expressions {
    using System;
    using System.ComponentModel;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
  
    public abstract class DataSourceExpression : IStateManager {
        private bool _tracking;
        private StateBag _viewState;
 
        protected HttpContext Context {
            get;
            private set;
        }
 
        protected Control Owner {
            get;
            private set;
        }     
 
        public IQueryableDataSource DataSource {
            get;
            // Internal set for unit testing
            internal set;
        }
 
 
        protected bool IsTrackingViewState {
            get {
                return _tracking;
            }
        }        
 
        [
        Browsable(false),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
        ]
        protected StateBag ViewState {
            get {
                if (_viewState == null) {
                    _viewState = new StateBag();
                    if (_tracking)
                        ((IStateManager)_viewState).TrackViewState();
                }
                return _viewState;
            }
        }
 
        protected DataSourceExpression() {
        }
 
        // internal for unit testing
        internal DataSourceExpression(Control owner) {
            Owner = owner;
        }
 
        public void SetDirty() {
            ViewState.SetDirty(true);
        }
 
        protected virtual void LoadViewState(object savedState) {
            if (savedState != null) {
                ((IStateManager)ViewState).LoadViewState(savedState);
            }
        }
 
        protected virtual object SaveViewState() {
            return (_viewState != null) ? ((IStateManager)_viewState).SaveViewState() : null;
        }
 
        protected virtual void TrackViewState() {
            _tracking = true;
 
            if (_viewState != null) {
                ((IStateManager)_viewState).TrackViewState();
            }
        }
 
        public abstract IQueryable GetQueryable(IQueryable source);
 
        public virtual void SetContext(Control owner, HttpContext context, IQueryableDataSource dataSource) {
            if (owner == null) {
                throw new ArgumentNullException("owner");
            }
 
            if (context == null) {
                throw new ArgumentNullException("context");
            }
 
            if (dataSource == null) {
                throw new ArgumentNullException("dataSource");
            }
 
            Owner = owner;
            Context = context;
            DataSource = dataSource;
        }
 
        #region IStateManager Members
 
        bool IStateManager.IsTrackingViewState {
            get {
                return IsTrackingViewState;
            }
        }
 
        void IStateManager.LoadViewState(object state) {
            LoadViewState(state);
        }
 
        object IStateManager.SaveViewState() {
            return SaveViewState();
        }
 
        void IStateManager.TrackViewState() {
            TrackViewState();
        }
 
        #endregion
    }
}