⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 combobox.cs

📁 ASP中web自定义控件的使用源码及说明文档
💻 CS
字号:
using System;
using System.ComponentModel;
using System.Collections;
using System.IO;
using System.Globalization;
using System.Resources;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;

namespace Bestcomy.Web.UI.WebControls
{
	/// <summary>
	/// 
	/// </summary>
	[ToolboxData("<{0}:ComboBox runat=server></{0}:ComboBox>"),ParseChildren(true,"Items"),PersistChildren(false),DefaultProperty("ID"),Designer(typeof(ComboBoxDesigner))]
	public class ComboBox : WebControl, INamingContainer, IPostBackDataHandler
	{
		private string _text = string.Empty;
		private ComboItemCollection _items = new ComboItemCollection();
		private object dataSource;

		public ComboBox() : base("DEADBEEF:COMBOBOX")
		{
		}

		[Browsable(true)]
		public string Text
		{
			get
			{
				if(_text == string.Empty)
				{
					if(this.SelectedItem != null)
						_text = this.SelectedItem.Text;
					else if(this.Items.Count > 0)
					{
						this.Items[0].Selected = true;
						_text = this.Items[0].Text;
					}
				}
				return _text;
			}
			set
			{
				this._text = value;
				this.ClearSelection();
			}
		}

		[Browsable(true)]
		public bool ReadOnly
		{
			get
			{
				return !this.Enabled;
			}
			set
			{
				this.Enabled = !value;
			}
		}

		//[DesignerSerializationVisibility(DesignerSerializationVisibility.Content),PersistenceMode(PersistenceMode.InnerDefaultProperty),Editor(typeof(ComboItemCollectionEditor),typeof(System.Drawing.Design.UITypeEditor)),MergableProperty(false)]
		[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Editor(typeof(System.ComponentModel.Design.CollectionEditor), typeof(System.Drawing.Design.UITypeEditor)), PersistenceMode(PersistenceMode.InnerDefaultProperty), MergableProperty(false)]
		public ComboItemCollection Items
		{
			get
			{
				return _items;
			}
		}

		[DefaultValue("")]
		public virtual string DataMember
		{
			get
			{
				object obj1 = this.ViewState["DataMember"];
				if (obj1 != null)
				{
					return (string) obj1;
				}
				return string.Empty;
			}
			set
			{
				this.ViewState["DataMember"] = value;
			}
		}

		[DefaultValue((string) null)]
		public object DataSource
		{
			get
			{
				return this.dataSource;
			}
			set
			{
				if (((value != null) && !(value is IListSource)) && !(value is IEnumerable))
				{
					throw new ArgumentException("unvalid data source.", this.ID);
				}
				this.dataSource = value;
			}
		}

		[DefaultValue("")]
		public virtual string DataTextField
		{
			get
			{
				object obj1 = this.ViewState["DataTextField"];
				if (obj1 != null)
				{
					return (string) obj1;
				}
				return string.Empty;
			}
			set
			{
				this.ViewState["DataTextField"] = value;
			}
		}

		[DefaultValue("")]
		public virtual string DataValueField
		{
			get
			{
				object obj1 = this.ViewState["DataValueField"];
				if (obj1 != null)
				{
					return (string) obj1;
				}
				return string.Empty;
			}
			set
			{
				this.ViewState["DataValueField"] = value;
			}
		}

		public void ClearSelection()
		{
			for(int i=0; i < this.Items.Count; i++)
			{
				this.Items[i].Selected = false;
			}
		}

		/// <summary>
		/// Clear all items and text.
		/// </summary>
		public void Clear()
		{
			this.Items.Clear();
			this.Text = string.Empty;
		}

		public ComboItem FindByText(string text)
		{
			for(int i=0; i < this.Items.Count; i++)
			{
				if(string.Compare(text,this.Items[i].Text,true)==0)
					return this.Items[i];
			}
			return null;
		}

		public ComboItem FindByValue(string value)
		{
			for(int i=0; i < this.Items.Count; i++)
			{
				if(string.Compare(value,this.Items[i].Value,true)==0)
					return this.Items[i];
			}
			return null;
		}

		[Browsable(false)]
		public int SelectedIndex
		{
			get
			{
				for(int i=0; i < this.Items.Count; i++)
				{
					if(this.Items[i].Selected)
						return i;
				}
				return -1;
			}
		}

		[Browsable(false)]
		public ComboItem SelectedItem
		{
			get
			{
				int selectedIndex = this.SelectedIndex;
				if(selectedIndex > -1)
					return this.Items[selectedIndex];
				else
					return null;
			}
		}

		public string SelectedValue
		{
			set
			{
				ComboItem item = this.FindByValue(value);
				if(item!=null && this.Items.Count > 0)
				{
					this.ClearSelection();
					item.Selected = true;
				}
			}
			get
			{
				if(this.SelectedIndex > -1)
					return this.SelectedItem.Value;
				return string.Empty;
			}
		}

		protected override void Render(HtmlTextWriter writer)
		{
//			Assembly assembly = typeof(ComboBox).Assembly;
//			Version version = assembly.GetName().Version;
			writer.Write("<?XML:NAMESPACE PREFIX=DEADBEEF />"+Environment.NewLine);
			writer.Write("<?IMPORT NAMESPACE=DEADBEEF IMPLEMENTATION=\"Bestcomy/ComboBox.ashx\" />"+Environment.NewLine);
			base.Render (writer);
		}

		protected override void RenderContents(HtmlTextWriter writer)
		{
			for(int i=0; i < this.Items.Count; i++)
			{
				ComboItem item = this.Items[i];
				writer.WriteBeginTag("OPTION");
				if(item.Selected)
					writer.WriteAttribute("selected", "selected", false);	
				writer.WriteAttribute("value",item.Value,true);
				writer.Write(">");
				HttpUtility.HtmlEncode(item.Text,writer);
				writer.WriteEndTag("OPTION");
				writer.WriteLine();
			}
		}

		protected override void AddParsedSubObject(object obj)
		{
			if(obj is ComboItem)
			{
				this.Items.Add((ComboItem)obj);
			}
		}


		protected override void AddAttributesToRender(HtmlTextWriter writer)
		{
			writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
			writer.AddAttribute("text",this.Text,true);
			writer.AddAttribute("Index",this.SelectedIndex.ToString());
			base.AddAttributesToRender (writer);
		}

		protected override void OnDataBinding(EventArgs e)
		{
			base.OnDataBinding (e);
			IEnumerable enumerable1 = DataSourceHelper.GetResolvedDataSource(this.DataSource, this.DataMember);
			if (enumerable1 != null)
			{
				this.Items.Clear();
				foreach (object obj1 in enumerable1)
				{
					ComboItem item = new ComboItem();
					if(this.DataTextField != string.Empty && this.DataValueField != string.Empty)
					{
						item.Text = DataBinder.GetPropertyValue(obj1,this.DataTextField,null);
						item.Value = DataBinder.GetPropertyValue(obj1,this.DataValueField,null);
					}
					else if(this.DataTextField != string.Empty)
					{
						item.Text = DataBinder.GetPropertyValue(obj1,this.DataTextField,null);
						item.Value = DataBinder.GetPropertyValue(obj1,this.DataTextField,null);
					}
					else if(this.DataValueField != string.Empty)
					{
						item.Text = DataBinder.GetPropertyValue(obj1,this.DataValueField,null);
						item.Value = DataBinder.GetPropertyValue(obj1,this.DataValueField,null);
					}
					else
						item.Text = obj1.ToString();
					this.Items.Add(item);
				}
			}
		}

		protected override void TrackViewState()
		{
			base.TrackViewState ();
			((IStateManager)this.Items).TrackViewState();
		}

		protected override object SaveViewState()
		{
			object obj1 = base.SaveViewState();
			object obj2 = ((IStateManager)this.Items).SaveViewState();
			object obj3 = this.Text;
			if(obj1==null && obj2==null && obj3==null)
				return null;
			return new Triplet(obj1,obj2,obj3);
		}

		protected override void LoadViewState(object savedState)
		{
			if(savedState!=null)
			{
				Triplet state = (Triplet)savedState;
				base.LoadViewState(state.First);
				((IStateManager)this.Items).LoadViewState(state.Second);
				_text = (string)state.Third;
			}
		}

		#region IPostBackDataHandler Members

		public void RaisePostDataChangedEvent()
		{
		}

		public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
		{
			string[] textArray1 = postCollection.GetValues(postDataKey);
			if (textArray1 != null)
			{
				this.ClearSelection();
				if(textArray1.Length > 1)
				{
					ComboItem item = this.FindByValue(textArray1[1]);
					if(item != null)
					{
						item.Selected = true;
					}
				}
				_text = textArray1[0];
			}
			return false;
		}

		#endregion
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -