2004-06-09 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / DropDownList.cs
1 //
2 // System.Web.UI.WebControls.DropDownList.cs
3 //
4 // Authors:
5 //   Gaurav Vaish (gvaish@iitk.ac.in)
6 //   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
7 //
8 // (C) Gaurav Vaish (2002)
9 // (C) 2003 Andreas Nahr
10 //\r
11 \r
12 using System;\r
13 using System.Collections.Specialized;\r
14 using System.ComponentModel;\r
15 using System.Drawing;\r
16 using System.Web;\r
17 using System.Web.UI;\r
18 \r
19 namespace System.Web.UI.WebControls\r
20 {\r
21         [ValidationProperty("SelectedItem")]\r
22         public class DropDownList : ListControl, IPostBackDataHandler\r
23         {\r
24                 public DropDownList(): base()\r
25                 {\r
26                 }\r
27
28                 [Browsable (false)]\r
29                 public override Color BorderColor\r
30                 {\r
31                         get\r
32                         {\r
33                                 return base.BorderColor;\r
34                         }\r
35                         set\r
36                         {\r
37                                 base.BorderColor = value;\r
38                         }\r
39                 }\r
40
41                 [Browsable (false)]\r
42                 public override BorderStyle BorderStyle\r
43                 {\r
44                         get\r
45                         {\r
46                                 return base.BorderStyle;\r
47                         }\r
48                         set\r
49                         {\r
50                                 base.BorderStyle = value;\r
51                         }\r
52                 }\r
53
54                 [Browsable (false)]\r
55                 public override Unit BorderWidth\r
56                 {\r
57                         get\r
58                         {\r
59                                 return base.BorderWidth;\r
60                         }\r
61                         set\r
62                         {\r
63                                 base.BorderWidth = value;\r
64                         }\r
65                 }\r
66
67                 [DefaultValue (0), WebCategory ("Misc")]
68                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
69                 [WebSysDescription ("The index number of the currently selected ListItem.")]\r
70                 public override int SelectedIndex\r
71                 {\r
72                         get\r
73                         {\r
74                                 int index  = base.SelectedIndex;\r
75                                 if (index < 0 && Items.Count > 0) {\r
76                                         index = 0;\r
77                                         Items [0].Selected = true;\r
78                                 }\r
79                                 return index;\r
80                         }\r
81                         set\r
82                         {\r
83                                 base.SelectedIndex = value;\r
84                         }\r
85                 }\r
86
87                 [Browsable (false), DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
88                 [Bindable (false), EditorBrowsable (EditorBrowsableState.Never)]\r
89                 public override string ToolTip\r
90                 {\r
91                         // MS ignores the tooltip for this one\r
92                         get {\r
93                                 return String.Empty;\r
94                         }\r
95                         set {\r
96                         }\r
97                 }\r
98 \r
99                 protected override void AddAttributesToRender(HtmlTextWriter writer)\r
100                 {\r
101                         if(Page != null)\r
102                         {\r
103                                 Page.VerifyRenderingInServerForm(this);\r
104                         }\r
105                         writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);\r
106                         base.AddAttributesToRender(writer);\r
107 \r
108                         if(AutoPostBack && Page != null)\r
109                         {\r
110                                 writer.AddAttribute(HtmlTextWriterAttribute.Onchange, Page.GetPostBackClientEvent(this,""));\r
111                                 writer.AddAttribute("language", "javascript");\r
112                         }\r
113                 }\r
114 \r
115                 protected override ControlCollection CreateControlCollection()\r
116                 {\r
117                         return new EmptyControlCollection(this);\r
118                 }\r
119 \r
120                 protected override void RenderContents(HtmlTextWriter writer)\r
121                 {\r
122                         if(Items != null)\r
123                         {\r
124                                 bool selected = false;\r
125                                 foreach(ListItem current in Items)\r
126                                 {\r
127                                         writer.WriteBeginTag("option");\r
128                                         if(current.Selected)\r
129                                         {\r
130                                                 if(selected)\r
131                                                 {\r
132                                                         throw new HttpException(HttpRuntime.FormatResourceString("Cannot_Multiselect_In_DropDownList"));\r
133                                                 }\r
134                                                 selected = true;\r
135                                                 writer.WriteAttribute("selected", "selected", false);\r
136                                         }\r
137                                         writer.WriteAttribute("value", current.Value, true);\r
138                                         writer.Write('>');\r
139                                         HttpUtility.HtmlEncode(current.Text, writer);\r
140                                         writer.WriteEndTag("option");\r
141                                         writer.WriteLine();\r
142                                 }\r
143                         }\r
144                 }\r
145 \r
146                 bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)\r
147                 {\r
148                         string[] vals = postCollection.GetValues(postDataKey);\r
149                         if(vals != null)\r
150                         {\r
151                                 int index = Items.FindByValueInternal(vals[0]);\r
152                                 if(index != SelectedIndex)\r
153                                 {\r
154                                         SelectedIndex = index;\r
155                                         return true;\r
156                                 }\r
157                         }\r
158                         return false;\r
159                 }\r
160 \r
161                 void IPostBackDataHandler.RaisePostDataChangedEvent()\r
162                 {\r
163                         OnSelectedIndexChanged(EventArgs.Empty);\r
164                 }\r
165         }\r
166 }\r