图:

要求:
1,弹出框可以是定义好的样式,如上图,有搜索板面和被选择列表,也可以是自由页面
2,显示的列数据为可配置
3,搜索的列数据为可配置
4,可以在弹出框中进行查询
5,在弹出框中的列表进行分页
6,选中后返回TEXT/VALUE键值对
7,选中后可以返回同页面其它控件需要的值
8,弹出框里的数据为可配置
9,支持jquery表单验证插件
10,支持在选中后触发客户端事件
11,支持在选中后触发服务器端事件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
namespace CustomControl
{
[
AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level=AspNetHostingPermissionLevel.Minimal),
DefaultProperty("Text"),
ToolboxData("<{0}:TextBoxSelect runat=\"server\"> </{0}:TextBoxSelect>")
]
[ToolboxBitmap(@"G:\CustomControl\Resources\Icons\TextBoxSelect.png")]
publicclass TextBoxSelect : CompositeControl
{
#region Value Property
///<summary>
/// Control Text
///</summary>
publicstring Text
{
get
{
if (txt ==null)
return String.Empty;
return txt.Text;
}
set { txt.Text = value; }
}
///<summary>
/// Control Value
///</summary>
publicstring Value
{
get
{
if (hidden ==null)
return String.Empty;
return hidden.Value;
}
set { hidden.Value = value; }
}
#endregion
#region Appearance Property
///<summary>
/// TextBox Css
///</summary>
publicstring TextBoxClass
{
get
{
object o = ViewState["TextBoxClass"];
if (o ==null)
return String.Empty;
return (string)o;
}
set { ViewState["TextBoxClass"] = value; }
}
///<summary>
/// Image Button Css
///</summary>
publicstring ImageButtonClass
{
get
{
object o = ViewState["ImageButtonClass"];
if (o ==null)
return String.Empty;
return (string)o;
}
set { ViewState["ImageButtonClass"] = value; }
}
#endregion
#region OpenWindow Property
///<summary>
/// Dialog Mode Default or Custom
///</summary>
public DialogModes DialogMode
{
get
{
object o = ViewState["DialogMode"];
if (o ==null)
return DialogModes.Default;
return (DialogModes)o;
}
set { ViewState["DialogMode"] = value; }
}
///<summary>
/// Dialog Url(If DialogMode equal Default then the url is /UserControl/TextBoxSelectDialogDefault.aspx
/// else is the value of this property)
///</summary>
publicstring DialogUrl
{
get
{
object o = ViewState["DialogUrl"];
if (o ==null)
returnstring.Empty;
return (string)o;
}
set { ViewState["DialogUrl"] = value; }
}
///<summary>
/// XML DataKey
///</summary>
publicstring DataKey
{
get
{
object o = ViewState["DataKey"];
if (o ==null)
returnstring.Empty;
return (string)o;
}
set { ViewState["DataKey"] = value; }
}
///<summary>
/// Being set value controls's ID separates with ","
/// Note: the control has to contain "value" property in the HTML DOM
///</summary>
publicstring SetValueControlIDList
{
get
{
object o = ViewState["SetValueControlIDList"];
if (o ==null)
returnstring.Empty;
return (string)o;
}
set { ViewState["SetValueControlIDList"] = value; }
}
///<summary>
/// The field in database data will be set to controls,which separate with ","
///</summary>
publicstring SetValueControlFieldList
{
get
{
object o = ViewState["SetValueControlFieldList"];
if (o ==null)
returnstring.Empty;
return (string)o;
}
set { ViewState["SetValueControlFieldList"] = value; }
}
#endregion
#region Validation Property
public RegexEnum ValType
{
get
{
object o = ViewState["ValType"];
if (o ==null)
return RegexEnum.Null;
return (RegexEnum)o;
}
set { ViewState["ValType"] = value; }
}
publicstring ValMsg
{
get
{
object o = ViewState["ValMsg"];
if (o ==null)
returnstring.Empty;
return (string)o;
}
set { ViewState["ValMsg"] = value; }
}
#endregion
public TextBoxSelect()
{
txt =new TextBox();
hidden =new HiddenField();
}
protectedoverridevoid OnPreRender(EventArgs e)
{
base.OnPreRender(e);
Page.ClientScript.RegisterClientScriptResource(this.GetType(), "CustomControl.Resources.Scripts.TextBoxSelect.js");
Style.Add(HtmlTextWriterStyle.WhiteSpace, "nowrap");
if (!DesignMode)
Page.Trace.Write("OnPreRender");
}
protectedoverridevoid CreateChildControls()
{
Controls.Clear();
CreateControlHierarchy();
ClearChildViewState();
}
private HiddenField hidden;
private TextBox txt;
protectedvirtualvoid CreateControlHierarchy()
{
Panel container =new Panel();
txt.ID ="text";
txt.Text =this.Text;
if (TextBoxClass !=string.Empty)
{
txt.CssClass = TextBoxClass;
}
else
{
txt.CssClass ="textbox";
}
if (Width !=0) txt.Width = Width;
hidden.Value = Value;
hidden.ID ="value";
Button btn =new Button();
btn.Text ="...";
btn.ID ="btn";
string strJS =string.Empty;
if (DialogMode == DialogModes.Default)
{
//function ShowDialog(url,SetValueControlIDList, SetValueControlFieldList,this.ClientID)
strJS =string.Format("javascript:return ShowDialog('{0}?key={1}','{2}','{3}','{4}');",
"/UserControl/TextBoxSelectDialogDefault.aspx", DataKey, SetValueControlIDList, SetValueControlFieldList, this.ClientID);
}
elseif (DialogMode == DialogModes.Custom)
{
strJS =string.Format("javascript:return ShowDialog('{0}','{1}','{2}','{4}');",
DialogUrl, DataKey, SetValueControlIDList, SetValueControlFieldList,this.ClientID);
}
btn.OnClientClick = strJS;
if (ValType != RegexEnum.Null && ValMsg!=string.Empty)
{
txt.Attributes.Add("ValType", ValType.ToString());
txt.Attributes.Add("ValMsg", ValMsg);
}
txt.Attributes.Add("ondblclick", strJS);
txt.Attributes.Add("onkeydown", "return false;");
txt.Attributes.Add("onpaste", "return false;");
if (ImageButtonClass !=string.Empty)
{
btn.CssClass = ImageButtonClass;
}
else
{
btn.CssClass ="TextBoxSelectImage";
}
Controls.Add(txt);
Controls.Add(hidden);
Controls.Add(btn);
if(!DesignMode )
Page.Trace.Write("CreateChildControls");
}
}
publicenum DialogModes { Default, Custom }
publicenum RegexEnum { Null, NotNull, Int, IntOrNull, Num, NumOrNull, Date, Email, QQ, Chinese }
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
namespace CustomControl
{
[
AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level=AspNetHostingPermissionLevel.Minimal),
DefaultProperty("Text"),
ToolboxData("<{0}:TextBoxSelect runat=\"server\"> </{0}:TextBoxSelect>")
]
[ToolboxBitmap(@"G:\CustomControl\Resources\Icons\TextBoxSelect.png")]
publicclass TextBoxSelect : CompositeControl
{
#region Value Property
///<summary>
/// Control Text
///</summary>
publicstring Text
{
get
{
if (txt ==null)
return String.Empty;
return txt.Text;
}
set { txt.Text = value; }
}
///<summary>
/// Control Value
///</summary>
publicstring Value
{
get
{
if (hidden ==null)
return String.Empty;
return hidden.Value;
}
set { hidden.Value = value; }
}
#endregion
#region Appearance Property
///<summary>
/// TextBox Css
///</summary>
publicstring TextBoxClass
{
get
{
object o = ViewState["TextBoxClass"];
if (o ==null)
return String.Empty;
return (string)o;
}
set { ViewState["TextBoxClass"] = value; }
}
///<summary>
/// Image Button Css
///</summary>
publicstring ImageButtonClass
{
get
{
object o = ViewState["ImageButtonClass"];
if (o ==null)
return String.Empty;
return (string)o;
}
set { ViewState["ImageButtonClass"] = value; }
}
#endregion
#region OpenWindow Property
///<summary>
/// Dialog Mode Default or Custom
///</summary>
public DialogModes DialogMode
{
get
{
object o = ViewState["DialogMode"];
if (o ==null)
return DialogModes.Default;
return (DialogModes)o;
}
set { ViewState["DialogMode"] = value; }
}
///<summary>
/// Dialog Url(If DialogMode equal Default then the url is /UserControl/TextBoxSelectDialogDefault.aspx
/// else is the value of this property)
///</summary>
publicstring DialogUrl
{
get
{
object o = ViewState["DialogUrl"];
if (o ==null)
returnstring.Empty;
return (string)o;
}
set { ViewState["DialogUrl"] = value; }
}
///<summary>
/// XML DataKey
///</summary>
publicstring DataKey
{
get
{
object o = ViewState["DataKey"];
if (o ==null)
returnstring.Empty;
return (string)o;
}
set { ViewState["DataKey"] = value; }
}
///<summary>
/// Being set value controls's ID separates with ","
/// Note: the control has to contain "value" property in the HTML DOM
///</summary>
publicstring SetValueControlIDList
{
get
{
object o = ViewState["SetValueControlIDList"];
if (o ==null)
returnstring.Empty;
return (string)o;
}
set { ViewState["SetValueControlIDList"] = value; }
}
///<summary>
/// The field in database data will be set to controls,which separate with ","
///</summary>
publicstring SetValueControlFieldList
{
get
{
object o = ViewState["SetValueControlFieldList"];
if (o ==null)
returnstring.Empty;
return (string)o;
}
set { ViewState["SetValueControlFieldList"] = value; }
}
#endregion
#region Validation Property
public RegexEnum ValType
{
get
{
object o = ViewState["ValType"];
if (o ==null)
return RegexEnum.Null;
return (RegexEnum)o;
}
set { ViewState["ValType"] = value; }
}
publicstring ValMsg
{
get
{
object o = ViewState["ValMsg"];
if (o ==null)
returnstring.Empty;
return (string)o;
}
set { ViewState["ValMsg"] = value; }
}
#endregion
public TextBoxSelect()
{
txt =new TextBox();
hidden =new HiddenField();
}
protectedoverridevoid OnPreRender(EventArgs e)
{
base.OnPreRender(e);
Page.ClientScript.RegisterClientScriptResource(this.GetType(), "CustomControl.Resources.Scripts.TextBoxSelect.js");
Style.Add(HtmlTextWriterStyle.WhiteSpace, "nowrap");
if (!DesignMode)
Page.Trace.Write("OnPreRender");
}
protectedoverridevoid CreateChildControls()
{
Controls.Clear();
CreateControlHierarchy();
ClearChildViewState();
}
private HiddenField hidden;
private TextBox txt;
protectedvirtualvoid CreateControlHierarchy()
{
Panel container =new Panel();
txt.ID ="text";
txt.Text =this.Text;
if (TextBoxClass !=string.Empty)
{
txt.CssClass = TextBoxClass;
}
else
{
txt.CssClass ="textbox";
}
if (Width !=0) txt.Width = Width;
hidden.Value = Value;
hidden.ID ="value";
Button btn =new Button();
btn.Text ="...";
btn.ID ="btn";
string strJS =string.Empty;
if (DialogMode == DialogModes.Default)
{
//function ShowDialog(url,SetValueControlIDList, SetValueControlFieldList,this.ClientID)
strJS =string.Format("javascript:return ShowDialog('{0}?key={1}','{2}','{3}','{4}');",
"/UserControl/TextBoxSelectDialogDefault.aspx", DataKey, SetValueControlIDList, SetValueControlFieldList, this.ClientID);
}
elseif (DialogMode == DialogModes.Custom)
{
strJS =string.Format("javascript:return ShowDialog('{0}','{1}','{2}','{4}');",
DialogUrl, DataKey, SetValueControlIDList, SetValueControlFieldList,this.ClientID);
}
btn.OnClientClick = strJS;
if (ValType != RegexEnum.Null && ValMsg!=string.Empty)
{
txt.Attributes.Add("ValType", ValType.ToString());
txt.Attributes.Add("ValMsg", ValMsg);
}
txt.Attributes.Add("ondblclick", strJS);
txt.Attributes.Add("onkeydown", "return false;");
txt.Attributes.Add("onpaste", "return false;");
if (ImageButtonClass !=string.Empty)
{
btn.CssClass = ImageButtonClass;
}
else
{
btn.CssClass ="TextBoxSelectImage";
}
Controls.Add(txt);
Controls.Add(hidden);
Controls.Add(btn);
if(!DesignMode )
Page.Trace.Write("CreateChildControls");
}
}
publicenum DialogModes { Default, Custom }
publicenum RegexEnum { Null, NotNull, Int, IntOrNull, Num, NumOrNull, Date, Email, QQ, Chinese }
}
玩技术,要学会忍受寂寞--

浙公网安备 33010602011771号