2 * Namespace: System.Web.UI.WebControls
\r
3 * Class: ListItemCollection
\r
5 * Author: Gaurav Vaish
\r
6 * Maintainer: gvaish@iitk.ac.in
\r
7 * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>
\r
8 * Implementation: yes
\r
11 * (C) Gaurav Vaish (2001)
\r
15 using System.Collections;
\r
17 using System.Web.UI;
\r
18 using System.ComponentModel;
\r
19 using System.Reflection;
\r
21 namespace System.Web.UI.WebControls
\r
23 //[Editor("??", typeof(Design.WebControls.ListItemCollectionEditor))]
\r
24 public sealed class ListItemCollection : IList, ICollection, IEnumerable, IStateManager
\r
26 private ArrayList items;
\r
27 private bool saveAll;
\r
28 private bool marked;
\r
30 public ListItemCollection()
\r
32 items = new ArrayList();
\r
41 return items.Capacity;
\r
45 items.Capacity = value;
\r
57 public bool IsReadOnly
\r
61 return items.IsReadOnly;
\r
65 public bool IsSynchronized
\r
69 return items.IsSynchronized;
\r
73 public ListItem this[int index]
\r
77 if(index < 0 || index >= Count)
\r
79 return (ListItem)(items[index]);
\r
83 public object SyncRoot
\r
91 public void Add(ListItem item)
\r
98 public void Add(string item)
\r
100 Add(new ListItem(item));
\r
103 public void AddRange(ListItem[] items)
\r
105 foreach(ListItem item in items)
\r
112 public void Clear()
\r
119 public bool Contains(ListItem item)
\r
121 return items.Contains(item);
\r
124 public void CopyTo(Array array, int index)
\r
126 items.CopyTo(array, index);
\r
129 public ListItem FindByText(string text)
\r
132 foreach(object current in items)
\r
135 if(((ListItem)current).Text == text)
\r
138 return (i==-1 ? null : (ListItem)items[i]);
\r
141 public ListItem FindByValue(string value)
\r
143 foreach(ListItem current in items)
\r
145 if(current.Value == value)
\r
153 internal int FindByValueInternal(string value)
\r
156 foreach(ListItem current in items)
\r
159 if(current.Value == value)
\r
167 public IEnumerator GetEnumerator()
\r
169 return items.GetEnumerator();
\r
172 public int IndexOf(ListItem item)
\r
174 return items.IndexOf(item);
\r
177 public void Insert(int index, ListItem item)
\r
179 items.Insert(index, item);
\r
184 public void Insert(int index, string item)
\r
186 Insert(index, new ListItem(item));
\r
189 public void RemoveAt(int index)
\r
191 if(index < 0 || index >= items.Count)
\r
193 items.RemoveAt(index);
\r
198 public void Remove(ListItem item)
\r
200 RemoveAt(IndexOf(item));
\r
203 public void Remove(string item)
\r
205 RemoveAt(IndexOf(ListItem.FromString(item)));
\r
208 internal object SaveViewState ()
\r
212 string [] keys = new string [count];
\r
213 string [] vals = new string [count];
\r
214 for(int i = 0; i < count; i++) {
\r
215 keys[i] = this [i].Text;
\r
216 vals[i] = this [i].Value;
\r
219 return new Triplet (count, keys, vals);
\r
222 ArrayList indices = new ArrayList ();
\r
223 ArrayList states = new ArrayList ();
\r
225 for(int i = 0; i < count; i++) {
\r
226 o = this [i].SaveViewState ();
\r
234 if (indices.Count > 0)
\r
235 return new Pair (indices, states);
\r
240 internal void LoadViewState (object savedState)
\r
242 if (savedState == null)
\r
246 if (savedState is Pair) {
\r
247 Pair pair = (Pair) savedState;
\r
248 ArrayList indices = (ArrayList) pair.First;
\r
249 ArrayList states = (ArrayList) pair.Second;
\r
251 end = indices.Count;
\r
252 for (i = 0; i < end; i++) {
\r
253 if ((int) indices [i] < Count ) {
\r
254 this [i].LoadViewState (states [i]);
\r
256 ListItem temp = new ListItem ();
\r
257 temp.LoadViewState (states [i]);
\r
261 } else if (savedState is Triplet) {
\r
262 Triplet t = (Triplet) savedState;
\r
263 items = new ArrayList ((int) t.First);
\r
265 object [] text = (object []) t.Second;
\r
266 object [] vals = (object []) t.Third;
\r
268 for(i = 0; i < end; i++)
\r
269 items.Add (new ListItem (text[i].ToString (), vals[i].ToString ()));
\r
273 internal void TrackViewState()
\r
276 foreach(ListItem current in items)
\r
277 current.TrackViewState();
\r
280 bool IList.IsFixedSize
\r
288 object IList.this[int index]
\r
292 return this[index];
\r
297 if(index >= 0 && index < Count)
\r
298 if(value is ListItem)
\r
299 items[index] = (ListItem) value;
\r
303 int IList.Add(object item)
\r
305 int index = (item is ListItem ? items.Add((ListItem)item) : -1);
\r
306 if(index!=-1 && marked)
\r
307 ((ListItem)item).Dirty = true;
\r
311 bool IList.Contains(object item)
\r
313 if(item is ListItem)
\r
314 return Contains((ListItem)item);
\r
318 int IList.IndexOf(object item)
\r
320 if(item is ListItem)
\r
321 return IndexOf((ListItem)item);
\r
325 void IList.Insert(int index, object item)
\r
327 if(item is ListItem)
\r
328 Insert(index, (ListItem)item);
\r
331 void IList.Remove(object item)
\r
334 Remove((string)item);
\r
335 if(item is ListItem)
\r
336 Remove((ListItem)item);
\r
339 bool IStateManager.IsTrackingViewState
\r
347 void IStateManager.LoadViewState(object state)
\r
349 LoadViewState(state);
\r
352 object IStateManager.SaveViewState()
\r
354 return SaveViewState();
\r
357 void IStateManager.TrackViewState()
\r