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