2 * Namespace: System.Web.UI.WebControls
6 * Maintainer: gvaish@iitk.ac.in
7 * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>
11 * (C) Gaurav Vaish (2001)
12 * Thanks to Leen Toelen (toelen@hotmail.com)'s classes that helped me
13 * to write the contents of the function LoadPostData(...)
17 using System.Collections;
18 using System.Collections.Specialized;
19 using System.Globalization;
22 using System.ComponentModel;
24 namespace System.Web.UI.WebControls
26 [DefaultEvent("CheckedChanged")]
27 [DefaultProperty("Text")]
28 //[DataBindingHanlder("??")]
30 public class CheckBox : WebControl, IPostBackDataHandler
32 private static readonly object CheckedChangedEvent = new object();
34 public CheckBox(): base(HtmlTextWriterTag.Input)
38 public virtual bool AutoPostBack
41 object o = ViewState ["AutoPostBack"];
42 return (o == null) ? false : (bool) o;
45 set { ViewState ["AutoPostBack"] = value; }
48 public virtual bool Checked
51 object o = ViewState ["Checked"];
52 return (o == null) ? false : (bool) o;
55 set { ViewState ["Checked"] = value; }
58 public virtual string Text
61 object o = ViewState ["Text"];
62 return (o == null) ? String.Empty : (string) o;
65 set { ViewState ["Text"] = value; }
68 private bool SaveCheckedViewState
71 if (Events [CheckedChangedEvent] != null){
75 Type type = GetType ();
76 if (type == typeof (CheckBox))
79 if (type == typeof (RadioButton))
86 public virtual TextAlign TextAlign
89 object o = ViewState ["TextAlign"];
90 return (o == null) ? TextAlign.Right : (TextAlign) o;
94 if (!System.Enum.IsDefined (typeof (TextAlign), value))
95 throw new ArgumentException ();
96 ViewState ["TextAlign"] = value;
100 public event EventHandler CheckedChanged
102 add { Events.AddHandler (CheckedChangedEvent, value); }
103 remove { Events.RemoveHandler (CheckedChangedEvent, value); }
106 protected virtual void OnCheckedChanged(EventArgs e)
109 EventHandler eh = (EventHandler) (Events [CheckedChangedEvent]);
115 protected override void OnPreRender(EventArgs e)
117 if (Page != null && Enabled)
118 Page.RegisterRequiresPostBack (this);
120 if (SaveCheckedViewState)
121 ViewState.SetItemDirty ("checked", false);
124 protected override void Render (HtmlTextWriter writer)
126 bool hasBeginRendering = false;
127 if(ControlStyleCreated && !ControlStyle.IsEmpty){
128 hasBeginRendering = true;
129 ControlStyle.AddAttributesToRender (writer, this);
133 hasBeginRendering = true;
134 writer.AddAttribute (HtmlTextWriterAttribute.Disabled, "disabled");
137 if (ToolTip.Length > 0){
138 hasBeginRendering = true;
139 writer.AddAttribute (HtmlTextWriterAttribute.Title, ToolTip);
142 if (Attributes.Count > 0){
143 string val = Attributes ["value"];
144 Attributes.Remove ("value");
145 if (Attributes.Count > 0){
146 hasBeginRendering = true;
147 Attributes.AddAttributes (writer);
151 Attributes ["value"] = val;
154 if (hasBeginRendering)
155 writer.RenderBeginTag (HtmlTextWriterTag.Span);
157 if (Text.Length > 0){
158 TextAlign ta = TextAlign;
159 if(ta == TextAlign.Right)
160 RenderInputTag (writer, ClientID);
161 writer.AddAttribute (HtmlTextWriterAttribute.For, ClientID);
162 writer.RenderBeginTag (HtmlTextWriterTag.Label);
164 writer.RenderEndTag ();
165 if(ta == TextAlign.Left)
166 RenderInputTag (writer, ClientID);
169 RenderInputTag (writer, ClientID);
171 if (hasBeginRendering)
172 writer.RenderEndTag ();
175 internal virtual void RenderInputTag (HtmlTextWriter writer, string clientId)
177 writer.AddAttribute (HtmlTextWriterAttribute.Id, clientId);
178 writer.AddAttribute( HtmlTextWriterAttribute.Type, "checkbox");
179 writer.AddAttribute (HtmlTextWriterAttribute.Name, UniqueID);
181 writer.AddAttribute (HtmlTextWriterAttribute.Checked, "checked");
184 writer.AddAttribute (HtmlTextWriterAttribute.Onclick,
185 Page.GetPostBackClientEvent (this, String.Empty));
186 writer.AddAttribute ("language", "javascript");
189 if (AccessKey.Length > 0)
190 writer.AddAttribute (HtmlTextWriterAttribute.Accesskey, AccessKey);
193 writer.AddAttribute (HtmlTextWriterAttribute.Tabindex,
194 TabIndex.ToString (NumberFormatInfo.InvariantInfo));
196 writer.RenderBeginTag (HtmlTextWriterTag.Input);
197 writer.RenderEndTag ();
200 bool IPostBackDataHandler.LoadPostData (string postDataKey, NameValueCollection postCollection)
202 string postedVal = postCollection [postDataKey];
203 bool postChecked = false;
204 if(postedVal != null)
205 postChecked = postedVal.Length > 0;
206 Checked = postChecked;
207 return (postChecked == false);
210 void IPostBackDataHandler.RaisePostDataChangedEvent()
212 OnCheckedChanged (EventArgs.Empty);