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

📄 itempicker.cs

📁 模拟数据库
💻 CS
字号:
using System;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SqlAdmin.Controls
{
    /// <summary>
    /// </summary>
    public enum ItemAction 
	{
        /// <summary>
        /// </summary>
        Add,
        /// <summary>
        /// </summary>
        Remove
	}

    /// <summary>
    /// </summary>
    public delegate void ItemPickerEventHandler(object sender, ItemPickerEventArgs e);

    /// <summary>
    /// </summary>
    public class ItemPickerEventArgs : EventArgs 
	{
        /// <summary>
        /// </summary>
        public ItemPickerEventArgs(ListItem item, ItemAction action)
            : base() 
		{
			this.Item=item;
			this.Action=action;
		}
        /// <summary>
        /// </summary>
        public ListItem Item;
        /// <summary>
        /// </summary>
        public ItemAction Action;
	}

	/// <summary>
	/// Abstract control for creating a 1 to 1 "picker" for any collection object
	/// that implements ICollection.
	/// </summary>
	public abstract class ItemPicker : UserControl 
	{
		#region Public properties
        /// <summary>
        /// </summary>
        public string DataTextField 
		{
			set 
			{
				ItemsBox.DataTextField=value;
				SelectedItemsBox.DataTextField=value;
			}
		}
        /// <summary>
        /// </summary>
        public string DataValueField 
		{
			set 
			{
				ItemsBox.DataValueField=value;
				SelectedItemsBox.DataValueField=value;
			}
		}

        /// <summary>
        /// </summary>
        public ICollection Items 
		{
			get 
			{
				return ViewState["Items"] as ICollection;
			}
			set 
			{
				if (value!=null && value.Count>0) 
				{
					ItemsBox.Items.Clear();
					ItemsBox.Enabled=true;
					ViewState["Items"]=value;
					BindItems();
				} 
				else 
				{
					resetItemsBox();
				}
			}
		}

        /// <summary>
        /// </summary>
        public ICollection SelectedItems 
		{
			get 
			{
				return ViewState["SelectedItems"] as ICollection;
			}
			set 
			{
				if (value!=null && value.Count>0) 
				{
					SelectedItemsBox.Items.Clear();
					SelectedItemsBox.Enabled=true;
					ViewState["SelectedItems"]=value;
					BindSelectedItems();
				} 
				else 
				{
					resetSelectedItemsBox();
				}
			}
		}
		#endregion

        /// <summary>
        /// </summary>
        public event ItemPickerEventHandler ItemChanged;

        /// <summary>
        /// </summary>
        public void OnItemChanged(ItemPickerEventArgs e) 
		{
			ItemChanged(this,e);
		}

        /// <summary>
        /// </summary>
        protected ListBox ItemsBox;
        /// <summary>
        /// </summary>
        protected ListBox SelectedItemsBox;

        /// <summary>
        /// </summary>
        protected override void OnPreRender(EventArgs e) 
		{
			if (!Page.IsPostBack) 
			{
				if (Items==null || Items.Count==0)
					resetItemsBox();
				else
					BindItems();

				if (SelectedItems==null || SelectedItems.Count==0)
					resetSelectedItemsBox();
				else
					BindSelectedItems();
			}
		}

        /// <summary>
        /// </summary>
        protected void BindItems() 
		{
			ItemsBox.DataSource=Items;
			ItemsBox.DataBind();
		}

        /// <summary>
        /// </summary>
        protected void BindSelectedItems() 
		{
			SelectedItemsBox.DataSource=SelectedItems;
			SelectedItemsBox.DataBind();
			foreach (ListItem item in SelectedItemsBox.Items) 
			{
				ListItem itemToRemove = ItemsBox.Items.FindByValue(item.Value);
				if (itemToRemove!=null)
					ItemsBox.Items.Remove(itemToRemove);
			}
			if (ItemsBox.Items.Count==0)
				resetItemsBox();
		}

        /// <summary>
        /// </summary>
        protected void AddItem_Click(object sender, EventArgs e) 
		{
			if (ItemsBox.SelectedItem!=null) 
			{
				if (!SelectedItemsBox.Enabled) 
				{
					SelectedItemsBox.Items.Clear();
					SelectedItemsBox.Enabled=true;
				}
				OnItemChanged(new ItemPickerEventArgs(ItemsBox.SelectedItem,ItemAction.Add));
				SelectedItemsBox.SelectedIndex=-1;
				SelectedItemsBox.Items.Add(ItemsBox.SelectedItem);
				ItemsBox.Items.Remove(ItemsBox.SelectedItem);
				if (ItemsBox.Items.Count==0)
					resetItemsBox();
			}
		}

        /// <summary>
        /// </summary>
        protected void RemoveItem_Click(object sender, EventArgs e) 
		{
			if (SelectedItemsBox.SelectedItem!=null) 
			{
				if (!ItemsBox.Enabled) 
				{
					ItemsBox.Items.Clear();
					ItemsBox.Enabled=true;
				}
				OnItemChanged(new ItemPickerEventArgs(SelectedItemsBox.SelectedItem,ItemAction.Remove));
				ItemsBox.SelectedIndex=-1;
				ItemsBox.Items.Add(SelectedItemsBox.SelectedItem);
				SelectedItemsBox.Items.Remove(SelectedItemsBox.SelectedItem);
				if (SelectedItemsBox.Items.Count==0)
					resetSelectedItemsBox();
			}
		}

		private void resetItemsBox() 
		{
			ItemsBox.Items.Clear();
			ItemsBox.Items.Add(new ListItem(defaultText,String.Empty));
			ItemsBox.Enabled=false;
		}

		private void resetSelectedItemsBox() 
		{
			SelectedItemsBox.Items.Clear();
			SelectedItemsBox.Items.Add(new ListItem(defaultText,String.Empty));
			SelectedItemsBox.Enabled=false;
		}

		private readonly string defaultText="(No Items)";
	}
}

⌨️ 快捷键说明

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