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
19 namespace System.Web.UI.WebControls
\r
21 public class ListItemCollection : IList, ICollection, IEnumerable, IStateManager
\r
23 private ArrayList items;
\r
24 private bool saveAll;
\r
25 private bool marked;
\r
27 public ListItemCollection()
\r
29 items = new ArrayList();
\r
38 return items.Capacity;
\r
42 items.Capacity = value;
\r
54 public bool IsReadOnly
\r
58 return items.IsReadOnly;
\r
62 public bool IsSynchronized
\r
66 return items.IsSynchronized;
\r
70 public ListItem this[int index]
\r
74 if(index < 0 || index >= Count)
\r
76 return (ListItem)(items[index]);
\r
80 if(index >= 0 && index < Count)
\r
81 items[index] = value;
\r
85 public object SyncRoot
\r
93 public void Add(ListItem item)
\r
100 public void Add(string item)
\r
102 Add(new ListItem(item));
\r
105 public void AddRange(ListItem[] items)
\r
107 foreach(ListItem item in items)
\r
114 public void Clear()
\r
121 public bool Contains(ListItem item)
\r
123 return items.Contains(item);
\r
126 public void CopyTo(Array array, int index)
\r
128 items.CopyTo(array, index);
\r
131 public ListItem FindByText(string text)
\r
134 foreach(object current in items)
\r
137 if(((ListItem)current).Text == text)
\r
140 return (i==-1 ? null : (ListItem)items[i]);
\r
143 public ListItem FindByValue(string value)
\r
145 foreach(ListItem current in items)
\r
147 if(current.Value == value)
\r
149 if(current is Disposable)
\r
157 internal int FindByValueInternal(string value)
\r
160 foreach(ListItem current in items)
\r
163 if(current.Value == value)
\r
165 if(current is Disposable)
\r
173 public IEnumerator GetEnumerator()
\r
175 return items.GetEnumerator();
\r
178 public int IndexOf(ListItem item)
\r
180 return items.IndexOf(item);
\r
183 public void Insert(int index, ListItem item)
\r
185 items.Insert(index, item);
\r
190 public void Insert(int index, string item)
\r
192 Insert(index, new ListItem(item));
\r
195 public void RemoveAt(int index)
\r
197 if(index < 0 || index >= items.Count)
\r
199 items.RemoveAt(index);
\r
204 public void Remove(ListItem item)
\r
206 RemoveAt(IndexOf(item));
\r
209 public void Remove(string item)
\r
211 RemoveAt(IndexOf(ListItem.FromString(item)));
\r
214 internal object SaveViewState()
\r
218 string[] keys = new string[Count];
\r
219 string[] vals = new string[Count];
\r
220 for(int i=0; i < Count; i++)
\r
222 keys[i] = this[i].Text;
\r
223 vals[i] = this[i].Value;
\r
225 return new Triplet(Count, keys, vals);
\r
227 ArrayList indices = new ArrayList();
\r
228 ArrayList states = new ArrayList();
\r
230 for(int i=0; i < Count; i++)
\r
232 o = this[i].SaveViewState();
\r
239 if(indices.Count > 0)
\r
240 return new Pair(indices, states);
\r
244 internal void LoadViewState(object savedState)
\r
246 if(savedState!=null)
\r
248 if(savedState is Pair)
\r
250 ArrayList indices = (ArrayList)(((Pair)savedState).First);
\r
251 ArrayList states = (ArrayList)(((Pair)savedState).Second);
\r
252 for(int i=0; i < indices.Count; i++)
\r
254 if( (int)indices[i] < Count )
\r
255 this[i].LoadViewState(states[i]);
\r
258 ListItem temp = new ListItem();
\r
259 temp.LoadViewState(states[i]);
\r
264 if(savedState is Triplet)
\r
266 Triplet t = (Triplet)savedState;
\r
267 items = new ArrayList((int)t.First);
\r
269 string[] text = (string[])t.Second;
\r
270 string[] vals = (string[])t.Third;
\r
271 for(int i=0; i < text.Length; i++)
\r
272 items.Add(new ListItem(text[i], vals[i]));
\r
277 internal void TrackViewState()
\r
280 foreach(ListItem current in this)
\r
281 current.TrackViewState();
\r
284 bool IList.IsFixedSize
\r
292 object IList.this[int index]
\r
296 return this[index];
\r
300 if(value is ListItem)
\r
302 this[index] = (ListItem)value;
\r
307 int IList.Add(object item)
\r
309 int index = (item is ListItem ? items.Add((ListItem)item) : -1);
\r
310 if(index!=-1 && marked)
\r
311 ((ListItem)item).Dirty = true;
\r
315 bool IList.Contains(object item)
\r
317 if(item is ListItem)
\r
318 return Contains((ListItem)item);
\r
322 int IList.IndexOf(object item)
\r
324 if(item is ListItem)
\r
325 return IndexOf((ListItem)item);
\r
329 void IList.Insert(int index, object item)
\r
331 if(item is ListItem)
\r
332 Insert(index, (ListItem)item);
\r
335 void IList.Remove(object item)
\r
338 Remove((string)item);
\r
339 if(item is ListItem)
\r
340 Remove((ListItem)item);
\r
343 bool IStateManager.IsTrackingViewState
\r
351 void IStateManager.LoadViewState(object state)
\r
353 LoadViewState(state);
\r
356 object IStateManager.SaveViewState()
\r
358 return SaveViewState();
\r
361 void IStateManager.TrackViewState()
\r