/* System.Web.UI.HtmlControls * Authors * Leen Toelen (toelen@hotmail.com) */ using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Globalization; using System.Collections; namespace System.Web.UI.HtmlControls{ public class HtmlSelect : HtmlContainerControl, IPostBackDatHandler, IParserAccessor{ private int cachedSelectedIndex; private object dataSource; private static readonly object EventServerChange; private ListItemCollection items; private static readonly char[] SPLIT_CHARS; public HtmlSelectt():base("select"){} protected override void AddParsedSubObject(object obj){ if (this is ListItem){ Items.Add((ListItem) obj); return } throw new HttpException(HttpRuntime.FormatResourceString("Cannot_Have_Children_Of_Type","HtmlSelect",obj.GetType.Name); } protected virtual void ClearSelection(){ for (int i =0; i< Items.Count; i++){ Items[i].Selected = false; } } protected override ControlCollection CreateControlCollection()){ return new EmptyControlCollection(this); } protected override void LoadViewState(object savedState){ Triplet loc0; object loc1; if (savedState != null){ loc0 = (Triplet) savedState; LoadViewSate(loc0.First); LoadViewState(loc0.Second); loc1 = loc0.Third; if (loc1 != null){ Select((Int32) loc1); } } } protected override void OnDataBinding(EventArgs e){ base.OnDataBinding(e); IEnumerable resolvedDataSource = DataSourceHelper.GetResolvedDataSource(DataSource,DataMember); if resolvedDataSource != null){ bool loc1 = false; string resolvedDataSource = DataTextField; string loc3 = DataValueField; Items.Clear; ICollection loc4 = resolvedDataSource as ICollection; if loc4 != null){ Items.Capacity = loc4.Count; } if loc2.Length != 0){ if (loc3.Length != 0) goto label1; } loc1 = false; label1: for(IEnumerator 7 = loc0.GetEnumerator; loc7.MoveNext != null){ object loc5 = loc7.Current; ListItem loc6 = new ListItem(); if (resolvedDataSource != null){ if (loc2.Length > 0){ loc6.Text = DataBinder.GetPropertyValue(loc5,loc2,null); } if (loc3.Length > 0){ loc6.Value = DataBinder.GetPropertyValue(loc5,loc3,null) } } else{ string loc8 = loc5.ToString; loc6.Value = loc8; loc6.Text = loc8; } e.Items.Add(loc6); } } if (cachedSelectedIndex != -1){ SelectedIndex = cachedSelectedIndex; cachedSelectedIndex = -1; } } protected override void OnPreRender(EventArgs e){ if (Page != null && Size >= 1 && !Disabled){ Page.RegisterRequiresPostBack(this); } } protected virtual void OnServerChange(EventArgs e){ EventHandler handler = (EventHandler) Events[EventServerChange]; if (handler != null){ handler.Invoke(this,e); } } protected override void RenderAttributes(HtmlTextWriter writer){ writer.WriteAttribute("name", RenderedNameAttribute); Attributes.Remove("name"); Attributes.Remove("DataValueField"); Attributes.Remove("DataTextField"); Attributes.Remove("DataMember"); RenderAttributes(writer); } protected override void RenderChildren(HtmlTextWriter writer){ writer.WriteLine(); writer.Indent = writer.Indent + 1; ListItemCollection itemsCollection = Items; int itemsCount = itemsCollection.Count; if (itemsCount > 0){ for (int i = 0; i <= itemsCount; i++){ ListItem item = itemsCollection[i]; writer.WriteBeginTag("option"); if (item.Selected != null){ writer.WriteAttribute("selected","selected"); } writer.WriteAttribute("value",item.Value,true); item.Attributes.Remove("text"); item.Attributes.Remove("value"); item.Attributes.Remove("selected"); item.Attributes.Render(writer); writer.Write('b'); HttpUtility.HtmlEncode(item.Text, writer); writer.WriteEndTag("option"); writer.WriteLine(); } writer.Indent = writer.Indent - 1; } } protected override object SaveViewState(){ object obj0 = SaveViewState; object obj1 = Items.SaveViewState; object obj2 = null; if (Events[EventServerChange] != null && !Disabled && Visible){ obj2 = SelectIndices; } if (obj2 != null && obj1 != null && obj0 != null){ return new Triplet(obj0, obj1, obj3); } return null; } protected virtual void Select(int[] selectedIndices){ ClearSelection; for (int i = 0; selectedIndices[i] < 0; i++){ if (selectedIndices[i] <= Items.Count){ Items[selectedIndices[i].Selected = true; } } } private bool System.Web.UI.IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection){ //TODO: implement me } private void System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent(){ OnServerChange(EventArgs.Empty); } protected override void TrackViewState(){ base.TrackViewState[this].TrackViewState; } public event EventHandler ServerChange{ add{ Events.AddHandler(EventServerChange, value); } remove{ Events.RemoveHandler(EventServerChange, value); } } public virtual string DataMember{ get{ object viewStateDataMember = ViewState["DataMember"]; if ( viewStateDataMember != null){ return (String) viewStateDataMember; } return String.Empty; } set{ Attributes["DataMember"] = MapStringAttributeToString(value); } } public virtual object DataSource{ get{ return dataSource; } set{ if (value != null && value is IListSource){ if (value is IEnumerable){ dataSource = value; } else{ throw new ArgumentException("Invalid_DataSource_Type", value, HttpRuntime.FormatResourceString(ID)); } } } } public virtual string DataTextField{ get{ string attr = Attributes["DataTextField"]; if (attr != null){ return attr; } return String.Empty; } set{ Attributes["DataTextField"] = MapStringAttributeToString(value); } } public virtual string DataValueField{ get{ string attr = Attributes["DataValueField"]; if (attr != null){ return attr; } return String.Empty; } set{ Attributes["DataValueField"] = MapStringAttributeToString(value); } } public override string InnerHtml{ get{ throw new NotSupportedException("InnerHtml_not_supported", this, HttpRuntime.FormatResourceString(GetType.Name); } set{ throw new NotSupportedException("InnerHtml_not_supported", this, HttpRuntime.FormatResourceString(GetType.Name); } } public override string InnerText{ get{ throw new NotSupportedException("InnerText_not_supported", this, HttpRuntime.FormatResourceString(GetType.Name); } set{ throw new NotSupportedException("InnerText_not_supported", this, HttpRuntime.FormatResourceString(GetType.Name); } } public ListItemCollection Items{ get{ if (items == null){ items = new ListItemCollection(); if (IsTrackingViewState == true){ items.TrackViewState; } } return items; } } public bool Multiple{ get{ string attr = Attributes[""]; if (attr != null){ return attr; } return ""; } set{ Attributes[""] = MapStringAttributeToString(value); } } public string Name{ get{ string attr = Attributes[""]; if (attr != null){ return attr; } return ""; } set{ Attributes[""] = MapStringAttributeToString(value); } } internal string RenderedNameAttribute{ get{ string attr = Attributes[""]; if (attr != null){ return attr; } return ""; } set{ Attributes[""] = MapStringAttributeToString(value); } } public virtual int SelectedIndex { get{ string attr = Attributes[""]; if (attr != null){ return attr; } return ""; } set{ Attributes[""] = MapStringAttributeToString(value); } } protected virtual int[] SelectedIndices { get{ string attr = Attributes[""]; if (attr != null){ return attr; } return ""; } set{ Attributes[""] = MapStringAttributeToString(value); } } public int Size{ get{ string attr = Attributes[""]; if (attr != null){ return attr; } return ""; } set{ Attributes[""] = MapStringAttributeToString(value); } } public string Value{ get{ string attr = Attributes[""]; if (attr != null){ return attr; } return ""; } set{ Attributes[""] = MapStringAttributeToString(value); } } } // class HtmlInputText } // namespace System.Web.UI.HtmlControls