📄 multilistbox.cs
字号:
/************************************************************************************
* Copyright (C) 2008 supesoft.com,All Rights Reserved *
* File: *
* MultiListBox.cs *
* Description: *
* Multi-ListBox控件 *
* Author: *
* Lzppcc *
* Lzppcc@hotmail.com *
* http://www.supesoft.com *
* Finish DateTime: *
* 2007年8月6日 *
* History: *
***********************************************************************************/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
using System.Collections.Specialized;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.ComponentModel;
using System.Globalization;
[assembly: WebResource("FrameWork.WebControls.Resource.moveAllLeft.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.moveAllLeft2.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.moveAllRight.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.moveAllRight2.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.moveLeft.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.moveLeft2.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.moveRight.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.moveRight2.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.sortDown.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.sortDown2.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.sortUp.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.sortUp2.gif", "image/gif")]
[assembly: WebResource("FrameWork.WebControls.Resource.MultiListBox.js", "text/javascript")]
namespace FrameWork.WebControls
{
/// <summary>
/// Multi-ListBox控件
/// </summary>
[ToolboxData("<{0}:MultiListBox runat=\"server\"></{0}:MultiListBox")]
[
ParseChildren(true),
PersistChildren(false),
]
public class MultiListBox : CompositeControl, IPostBackDataHandler
{
#region Fields
private MultiListBoxItem _firstListItem = new MultiListBoxItem();
private MultiListBoxItem _secondListItem = new MultiListBoxItem();
//private bool _stateLoaded = false;
/// <summary>
/// 显示行
/// </summary>
protected int _rows = 4;
//private bool _marked = false;
private string _separator;
#endregion
/// <summary>
///
/// </summary>
public void RaisePostDataChangedEvent()
{
}
#region AddAttributesToRender
/// <summary>
///
/// </summary>
/// <param name="writer"></param>
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Width, this.Width);
writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "1");
}
/// <summary>
///
/// </summary>
/// <param name="writer"></param>
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
//注册客户端操作脚本
StringBuilder sb = new StringBuilder();
sb.AppendFormat("<script language=\"javascript\">{0}", Environment.NewLine);
sb.AppendFormat("var multiList=new MultiListBox(document.getElementById('{1}_firstListBox'),document.getElementById('{1}_secondListBox'),'{1}_');{0}", Environment.NewLine, this.ClientID);
sb.AppendFormat("var img_AllLeft_have=\"{1}\";{0}", Environment.NewLine, GetWebResourceUrl("moveAllLeft.gif"));
sb.AppendFormat("var img_AllLeft_has=\"{1}\";{0}", Environment.NewLine, GetWebResourceUrl("moveAllLeft2.gif"));
sb.AppendFormat("var img_AllRight_have=\"{1}\";{0}", Environment.NewLine, GetWebResourceUrl("moveAllRight.gif"));
sb.AppendFormat("var img_AllRight_has=\"{1}\";{0}", Environment.NewLine, GetWebResourceUrl("moveAllRight2.gif"));
sb.AppendFormat("var img_Left_have=\"{1}\"{0};", Environment.NewLine, GetWebResourceUrl("moveLeft.gif"));
sb.AppendFormat("var img_Left_has=\"{1}\";{0}", Environment.NewLine, GetWebResourceUrl("moveLeft2.gif"));
sb.AppendFormat("var img_Right_have=\"{1}\";{0}", Environment.NewLine, GetWebResourceUrl("moveRight.gif"));
sb.AppendFormat("var img_Right_has=\"{1}\";{0}", Environment.NewLine, GetWebResourceUrl("moveRight2.gif"));
sb.Append("</script>");
writer.Write(sb.ToString());
}
#endregion
#region RenderContents
/// <summary>
///
/// </summary>
/// <param name="writer"></param>
protected override void RenderContents(HtmlTextWriter writer)
{
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.AddAttribute(HtmlTextWriterAttribute.Width, "45%");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
//显示FirstListBox列表框
RenderOptionsContents(writer, FirstListBox, "firstListBox", "multiList.transferRight()");
writer.RenderEndTag();
writer.AddAttribute(HtmlTextWriterAttribute.Width, "10%");
writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");
//间距
writer.RenderBeginTag(HtmlTextWriterTag.Td);
//输出图标
RenderMultiIcon(writer);
//
writer.RenderEndTag();
writer.AddAttribute(HtmlTextWriterAttribute.Width, "45%");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
//显示SecondListBox列表框
RenderOptionsContents(writer, SecondListBox, "secondListBox", "multiList.transferLeft()");
writer.RenderEndTag();
writer.RenderEndTag();
}
#endregion
#region Propertity
/// <summary>
///
/// </summary>
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Table;
}
}
/// <summary>
/// 获取或设置为列表项提供文本内容的数据源字段
/// </summary>
[WebCategory("Data"), Browsable(true), Description("获取或设置为列表项提供文本内容的数据源字段")]
public string DataTextField
{
get
{
object objTextField = this.ViewState["DataTextField"];
if (objTextField != null)
{
return (string)objTextField;
}
return string.Empty;
}
set
{
this.ViewState["DataTextField"] = value;
}
}
/// <summary>
/// 获取或设置为列表项提供值的数据源字段
/// </summary>
[WebCategory("Data"), Browsable(true), Description("获取或设置为列表项提供值的数据源字段")]
public string DataValueField
{
get
{
object objValueField = this.ViewState["DataValueField"];
if (objValueField != null)
{
return (string)objValueField;
}
return string.Empty;
}
set
{
this.ViewState["DataValueField"] = value;
}
}
/// <summary>
/// 获取或设置格式化字符串,该字符串用来控制如何显示绑定到列表控件的数据。(从 ListControl 继承。)
/// </summary>
[WebCategory("Data"), Browsable(true), Description("获取或设置格式化字符串,该字符串用来控制如何显示绑定到列表控件的数据")]
protected string DataTextFormatString
{
get
{
object objTextFormat = this.ViewState["DataTextFormatString"];
if (objTextFormat != null)
{
return (string)objTextFormat;
}
return string.Empty;
}
set
{
this.ViewState["DataTextFormatString"] = value;
}
}
/// <summary>
/// 第一个列表框控件(源列表框)
/// </summary>
[Browsable(false)]
//[NotifyParentProperty(false)]
//[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[PersistenceMode(PersistenceMode.InnerProperty)]
public MultiListBoxItem FirstListBox
{
get
{
if (_firstListItem == null)
_firstListItem = new MultiListBoxItem();
return _firstListItem;
}
}
/// <summary>
/// 第二个列表框控件(目标列表框)
/// </summary>
[Browsable(false)]
[PersistenceMode(PersistenceMode.InnerProperty)]
public MultiListBoxItem SecondListBox
{
get
{
if (_secondListItem == null)
_secondListItem = new MultiListBoxItem();
return _secondListItem;
}
}
/// <summary>
/// 获取或设置控件显示的宽度
/// </summary>
[WebCategory("Style"), Browsable(true), Description("获取或设置控件显示的宽度")]
public new string Width
{
get
{
string val = Attributes["width"];
if (val != null)
{
return val;
}
return string.Empty;
}
set
{
if (value == null || value == string.Empty)
Attributes.Remove("width");
else
Attributes["width"] = value;
}
}
/// <summary>
/// 获取或设置控件显示的高度
/// </summary>
[WebCategory("Style"), Browsable(true), Description("获取或设置控件显示的高度")]
public string Heigth
{
get
{
string val = Attributes["height"];
if (val == null)
return string.Empty;
return val;
}
set
{
if (value == null || value == string.Empty)
Attributes.Remove("height");
else
Attributes["height"] = value;
}
}
/// <summary>
/// 两个ListBox列表框中间间距
/// </summary>
public string Separator
{
get { return _separator; }
set { _separator = value; }
}
/// <summary>
/// 获取或设置列表框控件显示个数
/// </summary>
[WebCategory("Style"), Browsable(true), Description("获取或设置列表框控件显示个数")]
public int Rows
{
get
{
return _rows;
}
set
{
_rows = value;
}
}
/// <summary>
/// 列表的选择模式
/// </summary>
[WebCategory("Behavior"), Browsable(true), DefaultValue(0), Description("列表的选择模式")]
public ListSelectionMode SelectionMode
{
get
{
object objMode = this.ViewState["SelectionMode"];
if (objMode != null)
{
return (ListSelectionMode)objMode;
}
return ListSelectionMode.Single;
}
set
{
if ((value < ListSelectionMode.Single) || (value > ListSelectionMode.Multiple))
{
throw new ArgumentOutOfRangeException("value");
}
this.ViewState["SelectionMode"] = value;
}
}
/// <summary>
///
/// </summary>
protected string HFItemsAdded
{
get { return this.ClientID + "_ADDED"; }
}
/// <summary>
///
/// </summary>
protected string HFItemsRemoved
{
get { return this.ClientID + "_REMOVED"; }
}
#endregion
#region ViewStates
/// <summary>
///
/// </summary>
/// <param name="savedState"></param>
protected override void LoadViewState(object savedState)
{
if (savedState != null)
{
Triplet triplet = (Triplet)savedState;
base.LoadViewState(triplet.First);
Reflector.InvokeMethod(this.FirstListBox.Items, "LoadViewState", new object[] { triplet.Second });
Reflector.InvokeMethod(this.SecondListBox.Items, "LoadViewState", new object[] { triplet.Third });
}
else
{
base.LoadViewState(null);
}
//this._stateLoaded = true;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
protected override object SaveViewState()
{
if (EnableViewState == false)
return null;
//启用控件视图状态
object x = base.SaveViewState();
object y = Reflector.InvokeMethod(FirstListBox.Items, "SaveViewState", null);
object z = Reflector.InvokeMethod(SecondListBox.Items, "SaveViewState", null);
if ((x == null) && (y == null) && (z == null))
{
return null;
}
return new Triplet(x, y, z);
}
#endregion
#region OnDataBinding
/// <summary>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -