黑夜的狼

沮丧吗,那就是一种无病呻吟!留恋它就是一种高度近视!目光应该放得更远一点! 别不想飞,只是要一步跨过太平洋!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

图:

要求:

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 }
}
posted on 2011-03-07 03:54  anncesky  阅读(271)  评论(0)    收藏  举报