2 // System.Web.UI.WebControls/ParameterCollection.cs
4 // Author: Todd Berman <tberman@gentoo.org>
6 // (C) 2003 Todd Berman
11 using System.Collections;
12 using System.Collections.Specialized;
14 namespace System.Web.UI.WebControls
17 public class ParameterCollection : StateManagedCollection
20 private static Type[] _knownTypes = new Type[] {
21 typeof (ControlParameter),
22 typeof (CookieParameter),
23 typeof (FormParameter),
25 typeof (QueryStringParameter),
26 typeof (SessionParameter) };
28 private EventHandler _parametersChanged;
29 private KeyedList _values;
32 public int Add (Parameter param)
34 return ((IList)this).Add (param);
37 public int Add (string name, string value)
39 return ((IList)this).Add (new Parameter (name, TypeCode.Object, value));
42 public int Add (string name, TypeCode type, string value)
44 return ((IList)this).Add (new Parameter (name, type, value));
47 protected override object CreateKnownType (int idx)
51 return new ControlParameter ();
54 return new CookieParameter ();
57 return new FormParameter ();
60 return new Parameter ();
63 return new QueryStringParameter ();
66 return new SessionParameter ();
70 throw new ArgumentOutOfRangeException ("index");
73 protected override Type[] GetKnownTypes ()
78 public IOrderedDictionary GetValues (Control control)
82 _values = new KeyedList ();
83 foreach (Parameter param in this)
85 string name = param.Name;
86 for (int i = 1; _values.Contains (name); i++)
88 name = param.Name + i.ToString ();
90 _values.Add (name, param.ParameterValue);
96 public void Insert (int idx, Parameter param)
98 ((IList)this).Insert (idx, param);
101 protected override void OnClearComplete ()
103 base.OnClearComplete ();
104 OnParametersChanged (EventArgs.Empty);
107 protected override void OnInsert (int idx, object value)
109 base.OnInsert (idx, value);
110 ((Parameter)value).SetOwnerCollection (this);
113 protected override void OnInsertComplete (int idx, object value)
115 base.OnInsertComplete (idx, value);
116 OnParametersChanged (EventArgs.Empty);
119 protected virtual void OnParametersChanged (EventArgs e)
121 if (_parametersChanged != null)
122 _parametersChanged(this, e);
127 protected override void OnValidate (object o)
131 if ((o is Parameter) == false)
132 throw new ArgumentException ("o is not a Parameter");
135 public void Remove (Parameter param)
137 ((IList)this).Remove (param);
140 public void RemoveAt (int idx)
142 ((IList)this).RemoveAt (idx);
146 protected override void SetDirtyObject (object o)
148 throw new NotImplementedException ();
151 internal void CallOnParameterChanged ()
153 OnParametersChanged (EventArgs.Empty);
156 private int IndexOfString (string name)
158 for (int i = 0; i < Count; i++)
160 if (((Parameter)((IList)this)[i]).Name == name)
166 public Parameter this[int idx] {
168 return (Parameter) ((IList)this)[idx];
171 ((IList)this)[idx] = value;
175 public Parameter this[string name] {
177 int idx = IndexOfString (name);
180 return ((Parameter) ((IList)this)[idx]);
183 int idx = IndexOfString (name);
188 ((IList)this)[idx] = value;
192 public event EventHandler ParametersChanged {
193 add { _parametersChanged += value; }
194 remove { _parametersChanged -= value; }