2 // System.Web.UI.WebControls.Parameter
5 // Ben Maurer (bmaurer@users.sourceforge.net)
11 using System.Collections;
12 using System.Collections.Specialized;
16 namespace System.Web.UI.WebControls {
17 public class Parameter : ICloneable, IStateManager {
19 public Parameter () : base ()
23 protected Parameter (Parameter original)
25 this.DefaultValue = original.DefaultValue;
26 this.Direction = original.Direction;
27 this.TreatEmptyStringAsNull = original.TreatEmptyStringAsNull;
28 this.Type = original.Type;
29 this.Name = original.Name;
32 public Parameter (string name)
37 public Parameter(string name, TypeCode type) : this (name)
42 public Parameter (string name, TypeCode type, string defaultValue) : this (name, type)
44 this.DefaultValue = defaultValue;
47 protected virtual Parameter Clone ()
49 return new Parameter (this);
52 protected virtual object Evaluate (Control control)
54 return this.DefaultValue;
57 protected void OnParameterChanged ()
60 _owner.CallOnParameterChanged ();
63 protected virtual void LoadViewState (object savedState)
65 if (savedState == null)
68 ViewState.LoadViewState (savedState);
71 protected virtual object SaveViewState ()
73 if (viewState == null)
75 return viewState.SaveViewState ();
78 protected virtual void TrackViewState ()
80 isTrackingViewState = true;
81 if (viewState != null)
82 viewState.TrackViewState ();
85 object ICloneable.Clone ()
90 void IStateManager.LoadViewState (object savedState)
92 this.LoadViewState (savedState);
95 object IStateManager.SaveViewState ()
97 return this.SaveViewState ();
100 void IStateManager.TrackViewState ()
102 this.TrackViewState ();
105 bool IStateManager.IsTrackingViewState {
106 get { return this.IsTrackingViewState; }
110 public override string ToString ()
112 return base.ToString ();
115 public string DefaultValue {
117 return ViewState ["DefaultValue"] as string;
121 if (DefaultValue != value) {
122 ViewState ["DefaultValue"] = value;
123 OnParameterChanged ();
128 public ParameterDirection Direction {
130 object o = ViewState ["Direction"];
132 return (ParameterDirection) o;
134 return ParameterDirection.Input;
138 if (Direction != value) {
139 ViewState ["Direction"] = value;
140 OnParameterChanged ();
148 string s = ViewState ["Name"] as string;
157 ViewState ["Name"] = value;
158 OnParameterChanged ();
163 public bool TreatEmptyStringAsNull {
165 object o = ViewState ["TreatEmptyStringAsNull"];
173 if (TreatEmptyStringAsNull != value) {
174 ViewState ["TreatEmptyStringAsNull"] = value;
175 OnParameterChanged ();
180 public TypeCode Type {
182 object o = ViewState ["Type"];
186 return TypeCode.Object;
191 ViewState ["Type"] = value;
192 OnParameterChanged ();
199 protected StateBag ViewState {
201 if (viewState == null) {
202 viewState = new StateBag ();
203 if (IsTrackingViewState)
204 viewState.TrackViewState ();
210 bool isTrackingViewState = false;
211 protected bool IsTrackingViewState {
212 get { return isTrackingViewState; }
215 private ParameterCollection _owner;
217 internal void SetOwnerCollection (ParameterCollection own)
222 internal object ParameterValue {
224 object param = ViewState["ParameterValue"];
225 //FIXME: need to do some null string checking magic with TreatEmptyStringAsNull here
228 param = DefaultValue;
234 return Convert.ChangeType (param, Type);