2 // System.Web.UI.WebControls.RadioButtonList.cs
5 // Jordi Mas i Hernandez (jordi@ximian.com)
7 // (C) 2005 Novell, Inc (http://www.novell.com)
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System.Collections;
33 using System.ComponentModel;
34 using System.Collections.Specialized;
35 using System.Security.Permissions;
37 namespace System.Web.UI.WebControls {
40 [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
41 [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
43 [ValidationProperty ("SelectedItem")]
45 [SupportsEventValidation]
47 public class RadioButtonList : ListControl, IRepeatInfoUser,
48 INamingContainer, IPostBackDataHandler {
54 public RadioButtonList ()
63 [WebSysDescription ("")]
64 [WebCategory ("Layout")]
65 public virtual int CellPadding {
67 if (ControlStyleCreated == false)
68 return -1; // default value
70 return ((TableStyle) ControlStyle).CellPadding;
74 ((TableStyle) ControlStyle).CellPadding = value;
82 [WebSysDescription ("")]
83 [WebCategory ("Layout")]
84 public virtual int CellSpacing {
86 if (ControlStyleCreated == false)
87 return -1; // default value
89 return ((TableStyle) ControlStyle).CellSpacing;
93 ((TableStyle) ControlStyle).CellSpacing = value;
101 [WebSysDescription ("")]
102 [WebCategory ("Layout")]
103 public virtual int RepeatColumns {
105 return ViewState.GetInt ("RepeatColumns", 0);
110 throw new ArgumentOutOfRangeException ("The number of columns is set to a negative value.");
112 ViewState ["RepeatColumns"] = value;
119 [DefaultValue (RepeatDirection.Vertical)]
120 [WebSysDescription ("")]
121 [WebCategory ("Layout")]
122 public virtual RepeatDirection RepeatDirection {
124 return (RepeatDirection) ViewState.GetInt ("RepeatDirection", (int) RepeatDirection.Vertical);
128 if (value != RepeatDirection.Horizontal && value != RepeatDirection.Vertical)
129 throw new ArgumentOutOfRangeException ("he display direction of the list is not one of the RepeatDirection values.");
131 ViewState ["RepeatDirection"] = value;
138 [DefaultValue (RepeatLayout.Table)]
139 [WebSysDescription ("")]
140 [WebCategory ("Layout")]
141 public virtual RepeatLayout RepeatLayout {
143 return (RepeatLayout) ViewState.GetInt ("RepeatLayout", (int) RepeatLayout.Table);
147 if (value != RepeatLayout.Flow && value != RepeatLayout.Table)
148 throw new ArgumentOutOfRangeException ("The radio buttons layout is not one of the RepeatLayout values.");
150 ViewState ["RepeatLayout"] = value;
157 [DefaultValue (TextAlign.Right)]
158 [WebSysDescription ("")]
159 [WebCategory ("Appearance")]
160 public virtual TextAlign TextAlign {
162 return (TextAlign )ViewState.GetInt ("TextAlign", (int) TextAlign.Right);
166 if (value != TextAlign.Left && value != TextAlign.Right)
167 throw new ArgumentOutOfRangeException ("The label text alignment associated with the radio buttons is not one of the TextAlign values.");
169 ViewState ["TextAlign"] = value;
173 // Interface properties
179 get { return false; }
186 get { return false; }
193 get { return false; }
199 int RepeatedItemCount {
200 get { return Items.Count; }
203 bool IRepeatInfoUser.HasFooter {
204 get { return HasFooter; }
207 bool IRepeatInfoUser.HasHeader {
208 get { return HasHeader; }
211 bool IRepeatInfoUser.HasSeparators {
212 get { return HasSeparators; }
215 int IRepeatInfoUser.RepeatedItemCount {
216 get { return RepeatedItemCount; }
219 protected override Style CreateControlStyle ()
221 return new TableStyle (ViewState);
225 // MSDN: Searches the current naming container for a server control
226 // with the specified ID and path offset. The FindControl method
227 // always returns the RadioButtonList object.
228 protected override Control FindControl (string id, int pathOffset)
237 Style GetItemStyle (ListItemType itemType, int repeatIndex)
245 void RenderItem (ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer)
247 ListItem item = Items [repeatIndex];
249 RadioButton radio = new RadioButton ();
250 radio.Text = item.Text;
251 radio.ID = ClientID + "_" + repeatIndex;
252 radio.TextAlign = TextAlign;
253 radio.GroupName = UniqueID;
255 radio.Checked = item.Selected;
256 radio.ValueAttribute = item.Value;
257 radio.AutoPostBack = AutoPostBack;
258 radio.Enabled = Enabled;
259 radio.TabIndex = tabIndex;
261 radio.ValidationGroup = ValidationGroup;
262 radio.CausesValidation = CausesValidation;
263 if (radio.HasAttributes)
264 radio.Attributes.Clear ();
265 if (item.HasAttributes)
266 radio.Attributes.CopyFrom (item.Attributes);
268 radio.RenderControl (writer);
273 bool LoadPostData (string postDataKey, NameValueCollection postCollection)
278 string val = postCollection [postDataKey];
279 ListItemCollection items = Items;
280 int end = items.Count;
281 int selected = SelectedIndex;
282 for (int i = 0; i < end; i++) {
283 ListItem item = items [i];
284 if (item == null || val != item.Value)
306 void RaisePostDataChangedEvent ()
309 if (CausesValidation)
310 Page.Validate (ValidationGroup);
316 OnSelectedIndexChanged (EventArgs.Empty);
319 bool IPostBackDataHandler.LoadPostData (string postDataKey, NameValueCollection postCollection)
321 return LoadPostData (postDataKey, postCollection);
324 void IPostBackDataHandler.RaisePostDataChangedEvent ()
326 RaisePostDataChangedEvent ();
329 Style IRepeatInfoUser.GetItemStyle (ListItemType itemType, int repeatIndex)
331 return GetItemStyle (itemType, repeatIndex);
334 void IRepeatInfoUser.RenderItem (ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer)
336 RenderItem (itemType, repeatIndex, repeatInfo, writer);
344 override void Render (HtmlTextWriter writer)
348 Page.ClientScript.RegisterForEventValidation (this.UniqueID);
350 if (Items.Count == 0)
353 RepeatInfo repeat = new RepeatInfo ();
354 repeat.RepeatColumns = RepeatColumns;
355 repeat.RepeatDirection = RepeatDirection;
356 repeat.RepeatLayout = RepeatLayout;
361 repeat.RenderRepeater (writer, this, ControlStyle, this);