2 // System.Web.UI.WebControls.Literal.cs
5 // Jackson Harper (jackson@ximian.com)
7 // (C) 2005 Novell, Inc (http://www.novell.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using System.Collections;
30 using System.ComponentModel;
32 using System.Globalization;
33 using System.Collections.Specialized;
34 using System.Security.Permissions;
36 namespace System.Web.UI.WebControls {
39 [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
40 [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
42 [ValidationProperty("SelectedItem")]
44 [SupportsEventValidation]
46 public class ListBox : ListControl, IPostBackDataHandler {
53 #if NET_2_0 && HAVE_CONTROL_ADAPTERS
59 get { return base.BorderColor; }
60 set { base.BorderColor = value; }
64 #if NET_2_0 && HAVE_CONTROL_ADAPTERS
69 BorderStyle BorderStyle {
70 get { return base.BorderStyle; }
71 set { base.BorderStyle = value; }
75 #if NET_2_0 && HAVE_CONTROL_ADAPTERS
81 get { return base.BorderWidth; }
82 set { base.BorderWidth = value; }
89 [WebSysDescription ("")]
90 [WebCategory ("Appearance")]
98 return ViewState.GetInt ("Rows", 4);
101 if (value < 1 || value > 2000)
102 throw new ArgumentOutOfRangeException ("value");
103 ViewState ["Rows"] = value;
107 [DefaultValue(ListSelectionMode.Single)]
108 [WebSysDescription ("")]
109 [WebCategory ("Behavior")]
115 ListSelectionMode SelectionMode {
117 return (ListSelectionMode) ViewState.GetInt ("SelectionMode",
118 (int) ListSelectionMode.Single);
121 if (!Enum.IsDefined (typeof (ListSelectionMode), value))
122 throw new ArgumentOutOfRangeException ("value");
123 ViewState ["SelectionMode"] = value;
130 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
131 [EditorBrowsable(EditorBrowsableState.Never)]
132 public override string ToolTip {
133 get { return String.Empty; }
134 set { /* Tooltip is always String.Empty */ }
139 public virtual int[] GetSelectedIndices ()
141 return (int []) GetSelectedIndicesInternal ().ToArray (typeof (int));
145 protected override void AddAttributesToRender (HtmlTextWriter writer)
148 Page.VerifyRenderingInServerForm (this);
150 base.AddAttributesToRender (writer);
153 writer.AddAttribute (HtmlTextWriterAttribute.Name, UniqueID);
155 writer.AddAttribute (HtmlTextWriterAttribute.Name, UniqueID);
158 if (SelectionMode == ListSelectionMode.Multiple)
159 writer.AddAttribute (HtmlTextWriterAttribute.Multiple,
161 writer.AddAttribute (HtmlTextWriterAttribute.Size,
162 Rows.ToString (CultureInfo.InvariantCulture));
170 override void RenderContents (HtmlTextWriter writer)
172 base.RenderContents (writer);
174 foreach (ListItem item in Items) {
175 writer.WriteBeginTag ("option");
177 writer.WriteAttribute ("selected", "selected", false);
179 writer.WriteAttribute ("value", item.Value, true);
182 string encoded = HttpUtility.HtmlEncode (item.Text);
183 writer.Write (encoded);
184 writer.WriteEndTag ("option");
194 override void OnPreRender (EventArgs e)
196 base.OnPreRender (e);
198 Page.RegisterRequiresPostBack (this);
204 bool LoadPostData (string postDataKey, NameValueCollection postCollection)
206 string [] values = postCollection.GetValues (postDataKey);
207 if (values == null || values.Length == 0) {
208 int prev_index = SelectedIndex;
210 return (prev_index != -1);
213 if (SelectionMode == ListSelectionMode.Single)
214 return SelectSingle (values);
215 return SelectMultiple (values);
218 bool SelectSingle (string [] values)
220 string val = values [0];
221 int idx = Items.IndexOf (val);
222 int prev_index = SelectedIndex;
223 if (idx != prev_index) {
224 // This will set both the index value and the item.Selected property
231 bool SelectMultiple (string [] values)
233 ArrayList prev_selected = GetSelectedIndicesInternal ();
235 foreach (string val in values) {
236 ListItem item = Items.FindByValue (val);
238 item.Selected = true;
241 ArrayList new_selection = GetSelectedIndicesInternal ();
242 int i = prev_selected.Count;
243 if (new_selection.Count != i)
247 if ((int) prev_selected [i] != (int) new_selection [i])
257 void RaisePostDataChangedEvent ()
259 OnSelectedIndexChanged (EventArgs.Empty);
262 bool IPostBackDataHandler.LoadPostData (string postDataKey,
263 NameValueCollection postCollection)
265 return LoadPostData (postDataKey, postCollection);
268 void IPostBackDataHandler.RaisePostDataChangedEvent ()
270 RaisePostDataChangedEvent ();