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

📄 listcontrol.cs

📁 不错的人事管理系统
💻 CS
字号:
using System;
using System.Collections;

namespace System.Web.UI.WebControls
{
	/// <summary>
	/// Summary description for ListControl.
	/// </summary>
	public class ListControl : WebControl
	{
		private static object EventSelectedIndexChanged;
		private static char[] SPLIT_CHARS;
		private int cachedSelectedIndex;
		private object dataSource;
		private ListItemCollection items;

		static ListControl() 
		{
			char[] local0;

			ListControl.EventSelectedIndexChanged = new Object();
			local0 = new Char[1];
			local0[0] = ',';
			ListControl.SPLIT_CHARS = local0;
		}

		public ListControl() : base(System.Web.UI.HtmlTextWriterTag.Select) 
		{
			this.cachedSelectedIndex = -1;
		}

		//清除选择,将Items中的所有项的Selected置为false
		public virtual void ClearSelection() 
		{
			int local0;

			local0 = 0;
			while (local0 < this.Items.Count) 
			{
				this.Items[local0].Selected = false;
				local0++;
			}
		}

		//ListControl的ViewState使用System.Web.UI.Triplet对象保存,
		//First保存基类WebControl的ViewState
		//Second保存Items的ViewState
		//Third保存SelectedIndices
		protected override void LoadViewState(object savedState) //ok
		{
			System.Web.UI.Triplet local0;
			object local1;

			if (savedState != null) 
			{
				local0 = (System.Web.UI.Triplet) savedState;

				//调用基类的LoadViewState
				base.LoadViewState(local0.First);

				//对Items进行LoadViewState
				this.Items.LoadViewState(local0.Second);

				//设置SelectedIndices
				local1 = local0.Third;
				if (local1 != null)
					this.SelectInternal((ArrayList) local1);
			}
		}

		//ListControl的ViewState使用System.Web.UI.Triplet对象保存,
		//First保存基类WebControl的ViewState
		//Second保存Items的ViewState
		//Third保存SelectIndex
		protected override object SaveViewState() //ok
		{
			object local0;
			object local1;
			object local2;

			//基类的SaveViewState结果
			local0 = base.SaveViewState();

			//Items的SaveViewState结果
			local1 = this.Items.SaveViewState();

			//获取SelectedIndicesInternal的结果
			local2 = null;
			if (this.SaveSelectedIndicesViewState)
				local2 = this.SelectedIndicesInternal;

			//如果基类的SaveViewState结果不为null,
			//或者Items的SaveViewState结果不为null,
			//或者SelectedIndicesInternal不为null,
			//则返回一个Triplet对象
			if ((local2 != null) 
				|| (local1 != null) 
				|| (local0 != null)
				)
			{
				return new System.Web.UI.Triplet(local0, local1, local2);
			}

			return null;
		}

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


		private bool SaveSelectedIndicesViewState //ok
		{
			get
			{
				Type local0;

				if ((this.Events[ListControl.EventSelectedIndexChanged] != null) 
					|| this.Enabled
					|| this.Visible
					)
				{
					//line 0028
					return true;
				}

				local0 = this.GetType();

				if ((local0 == typeof(DropDownList) 
					|| local0 == typeof(ListBox) 
					|| local0 == typeof(CheckBoxList) 
					|| local0 == typeof(RadioButtonList))
					)
				{
					return false;
				}

				return true;
			}
		}


		internal void SelectInternal(ArrayList selectedIndices) //ok
		{
			this.ClearSelection();

			for(int i=0; i< selectedIndices.Count; i++)
			{
				int local1;

				local1 = (Int32) selectedIndices[i];
				if (local1 >= 0 && local1 < this.Items.Count)
				{
					this.Items[local1].Selected = true;
				}
			}
		}


		public virtual ListItemCollection Items
		{
			get
			{
				if (this.items == null) 
				{
					this.items = new ListItemCollection();

					if (this.IsTrackingViewState)
					{
						this.items.TrackViewState();
					}
				}

				return this.items;
			}
		}

		public virtual bool AutoPostBack
		{
			get
			{
				object local0;

				local0 = this.ViewState["AutoPostBack"];
				if (local0 != null)
				{
					return (bool) local0;
				}

				return false;
			}
			set
			{
				this.ViewState["AutoPostBack"] = value;
			}
		}

		
		public virtual string DataMember
		{
			get
			{
				object local0;

				local0 = this.ViewState["DataMember"];
				if (local0 != null)
					return (String) local0;
				return System.String.Empty;
			}
			set
			{
				this.ViewState["DataMember"] = value;
			}
		}

		//DataSource必须实现了System.ComponentModel.IListSource接口
		//或System.Collections.IEnumerable接口
		public virtual object DataSource
		{
			get
			{
				return this.dataSource;
			}
			set
			{
				if((value == null) 
					|| (value as System.ComponentModel.IListSource == null)
					|| (value as IEnumerable == null)
					)
				{
					throw new ArgumentException(
						HttpRuntime.FormatResourceString("Invalid_DataSource_Type", this.ID)
						);
				}

				this.dataSource = value;
			}
		}

		public virtual string DataTextField
		{
			get
			{
				object local0;

				local0 = this.ViewState["DataTextField"];
				if (local0 != null)
					return (String) local0;
				return System.String.Empty;
			}
			set
			{
				this.ViewState["DataTextField"] = value;
			}
		}

		public virtual string DataTextFormatString
		{
			get
			{
				object local0;

				local0 = this.ViewState["DataTextFormatString"];
				if (local0 != null)
				{
					return (String) local0;
				}

				return System.String.Empty;
			}
			set
			{
				this.ViewState["DataTextFormatString"] = value;
			}
		}

		public virtual string DataValueField
		{
			get
			{
				object local0;

				local0 = this.ViewState["DataValueField"];
				if (local0 != null)
				{
					return (String) local0;
				}

				return System.String.Empty;
			}
			set
			{
				this.ViewState["DataValueField"] = value;
			}
		}

		public virtual ListItem SelectedItem
		{
			get
			{
				int local0;

				local0 = this.SelectedIndex;
				if (local0 >= 0)
				{
					return this.Items[local0];
				}
				return null;
			}
		}


		/// <summary>
		/// 
		/// </summary>
		public virtual int SelectedIndex
		{
			get
			{
				for(int i=0; i<this.Items.Count; i++)
				{
					if(this.Items[i].Selected)
					{
						return i;
					}
				}

				return -1;
			}
			set
			{
				//如果Items数量为0,保存在cachedSelectedIndex中并返回
				if (this.Items.Count == 0) 
				{
					this.cachedSelectedIndex = value;
					return;
				}

				//如果value小于-1,或者大于等于Items的数量
				if (value < -1 || value >= this.Items.Count)
				{
					throw new ArgumentOutOfRangeException("value");
				}

				//清除选择
				this.ClearSelection();

				//设置Items[value]的Selected属性
				if (value >= 0)
				{
					this.Items[value].Selected = true;
				}
			}
		}

		//获取Items中所有被选中的项的Index,
		//如果没有任何项被选中,则返回null
		protected internal virtual ArrayList SelectedIndicesInternal
		{
			get
			{
				ArrayList __arraylist;

				__arraylist = null;

				for(int i=0; i<this.Items.Count; i++)
				{
					if(this.Items[i].Selected)
					{
						if(__arraylist == null)
						{
							__arraylist = new ArrayList(3);
						}

						__arraylist.Add(i);
					}
				}

				return __arraylist;
			}
		}

		protected virtual void OnSelectedIndexChanged(EventArgs e) 
		{
			EventHandler local0;

			local0 = (EventHandler) this.Events[ListControl.EventSelectedIndexChanged];

			if (local0 != null)
			{
				local0.Invoke(this, e);
			}
		}

		[WebCategoryAttribute("Action")]
		[WebSysDescriptionAttribute("ListControl_OnSelectedIndexChanged")]
		public event EventHandler SelectedIndexChanged
		{
			add
			{
				this.Events.AddHandler(ListControl.EventSelectedIndexChanged, value);
			}
			remove
			{
				this.Events.RemoveHandler(ListControl.EventSelectedIndexChanged, value);
			}
		}

	}
}

⌨️ 快捷键说明

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