通过这个控件,可以判断你输入的文本框中的内容是否与你已经存在的数据或者是数据集中的数据相等(当焦点离开该控件的时候),并且根据你输入的要提示的信息来提示输入的是否是正确的:比如用户注册的时候,你可以用来判断用户名是否已经存在,以便快速的提示给注册的用户。它自带要提示的信息的属性,可以在文本框的后面进行提示。空间的数据集为object,支持多种数据类型:可以是单个的数据源,也可以为数组,arraylist,datatable、dataset等数据集。
主类:(ValidTextBox.cs)
自定义TextBox类:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace DJControl.DJTextBox.Valid.DataBind
{
[DefaultProperty("Text"), ToolboxData("<{0}:TextBox runat=server></{0}:TextBox>")]
internal class TextBox : System.Web.UI.WebControls.TextBox
{
Properties#region Properties
[Description("数据源"), DefaultValue(null), Browsable(false),Bindable(true)]
public object DataSource
{
get
{
object source = (object)ViewState["Source"];
return ((source == null) ? null : source);
}
set
{
ViewState["Source"] = value;
}
}
[Description("验证字段"), DefaultValue("")]
public string DataField
{
get
{
String datafield = (String)ViewState["ValidField"];
return ((datafield == null) ? String.Empty : datafield);
}
set
{
ViewState["ValidField"] = value;
}
}
[Description("正确时的提示"), DefaultValue("")]
public string TrueText
{
get
{
String trueText = (String)ViewState["TrueText"];
return ((trueText == null) ? String.Empty : trueText);
}
set
{
ViewState["TrueText"] = value;
}
}
[Description("错误时的提示"), DefaultValue("")]
public string FalseText
{
get
{
String falseText = (String)ViewState["FalseText"];
return ((falseText == null) ? String.Empty : falseText);
}
set
{
ViewState["FalseText"] = value;
}
}
#endregion
All OverrideMethod#region All OverrideMethod
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
ScriptCreate _ConvertHelper = new ScriptCreate();
string strClientScript;
try
{
if (this.DataSource != null)
{
if (!_ConvertHelper.CreateScript(this, this.DataSource, this.DataField, this.TrueText, this.FalseText))
{
strClientScript = " alert('Property DataSource is Null!');";
if (!Page.ClientScript.IsStartupScriptRegistered("Default_Property"))
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "Default_Property", strClientScript, true);
}
}
_ConvertHelper.RegisterScript(this.Page);
}
else
{
strClientScript = " alert('Property DataSource is Null!');";
if (!Page.ClientScript.IsStartupScriptRegistered("Default_Property"))
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "Default_Property", strClientScript, true);
}
}
}
catch
{
strClientScript = " alert('No Set [DataSource] Property!');";
if (!Page.ClientScript.IsStartupScriptRegistered("Default_Property"))
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "Default_Property", strClientScript, true);
}
}
}
#endregion
}
}
javascript事件触发类:(ScriptCreate.cs)
using System;
using System.Data;
using System.Drawing;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace DJControl.DJTextBox.Valid.DataBind
{
internal class ScriptCreate
{
Properties#region Properties
/**//// <summary>
/// 存储onblur方法脚本变量
/// </summary>
private string OnBlurScript = "";
private string OnBlurScriptName = "ValueExists";
private string OnfocusScriptName = "SelectDown";
private string OnLoadScriptName = "OnInit";
/**//// <summary>
/// 存储onfocus方法脚本变量
/// </summary>
private string OnfocusScript = "";
/**//// <summary>
/// 定义Javscript
/// </summary>
private string DifinScript = "";
/**//// <summary>
/// 存储方法脚本变量
/// </summary>
private string FunctionScript = "";
/**//// <summary>
/// 存储要读取控件的属性(如: t.text/t.Value etc)
/// </summary>
private string ValueSymbol = ".value";
#endregion
Method#region Method
/**//// <summary>
/// 判断此javascript方法是否已经注册过
/// </summary>
/// <param name="control"></param>
/// <param name="ScriptName">方法名</param>
internal void ScriptIsRefistered(TextBox control,ref string ScriptName)
{
while (true)
{
if (!control.Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), ScriptName))
{
break;
}
else
{
ScriptName = control.Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), ScriptName) ? ScriptName + "1" : ScriptName;
}
}
}
internal bool CreateScript(TextBox control, object source, string field,string trueText,string falseText)
{
ScriptIsRefistered(control,ref OnBlurScriptName);
ScriptIsRefistered(control,ref OnfocusScriptName);
ScriptIsRefistered(control,ref OnLoadScriptName);
string validTxT = control.Text;
string JSHeader = "";
string JSContent = "";
int count = 0;
DataObjectExcute.SetDataSource = source;
object[] objsource=DataObjectExcute.GetDataCollection(field);
//OnBlur事件
DifinScript += "<script language='javascript'>\n";
if (objsource == null)
{
return false;
}
else if (objsource.Length == 1)
{
DifinScript += "var datalist=new Array(1);\n";
DifinScript += "datalist[0]='" + objsource[0].ToString() + "';\n";
}
else
{
DifinScript += " var datalist=new Array(" + objsource.Length + ");\n";
foreach (object obj in objsource)
{
DifinScript += " datalist[" + count + "]='" + obj.ToString() + "';\n";
++count;
}
}
OnBlurScript += DifinScript;
OnBlurScript += "\n \n document.getElementById('" + control.Parent.Controls[0].ClientID + "').onblur=" + OnBlurScriptName + ";\n";
OnBlurScript += "\n \n document.getElementById('" + control.Parent.Controls[0].ClientID + "').onfocus=" + OnfocusScriptName + ";\n";
OnBlurScript += "\n</script>\n";
//Onfocus事件
OnfocusScript += "<script language='javascript'>\n function " + OnfocusScriptName + "()\n{\n";
//OnfocusScript += "document.getElementById('" + control.Parent.Controls[0].ClientID + "').style.backgroundColor='#66ff66';\n";
OnfocusScript += "document.getElementById('" + control.Parent.Controls[1].ClientID + "').value=' *';\n";
OnfocusScript += "document.getElementById('" + control.Parent.Controls[0].ClientID + "').style.border='#66ff66 thin solid';\n";
OnfocusScript += "document.getElementById('" + control.Parent.Controls[1].ClientID + "').style.color='#ff0000';\n";
OnfocusScript += "\n}\n;";
OnfocusScript += "\n</script>\n";
//function ValueExist()
JSHeader = " <script language='javascript'>\n function " + OnBlurScriptName + "()\n{\n";
JSContent += " var isexist = false;\n for(i=0;i<datalist.length;i++)\n";
JSContent += "{\n if(datalist[i]==document.getElementById('" + control.Parent.Controls[0].ClientID + "').value)\n{\n";
JSContent += " isexist=true;\n break; \n}\n}\n";
//JSContent += "document.getElementById('" + control.Parent.Controls[0].ClientID + "').style.backgroundColor='#ffffff';\n";
JSContent += "document.getElementById('" + control.Parent.Controls[0].ClientID + "').style.borderColor='silver';\n";
JSContent += "document.getElementById('" + control.Parent.Controls[0].ClientID + "').style.borderStyle='solid';\n";
JSContent += "document.getElementById('" + control.Parent.Controls[0].ClientID + "').style.borderWidth='1px';\n";
JSContent += "\n if(document.getElementById('" + control.Parent.Controls[0].ClientID + "').value=='')\n{";
JSContent += "document.getElementById('" + control.Parent.Controls[1].ClientID + "')" + ValueSymbol + "= ' *';\n";
JSContent += "document.getElementById('" + control.Parent.Controls[1].ClientID + "').style.color='#ff0000';\n}";
JSContent += "else \n {";
JSContent += " if (isexist)\n{\n ";
/**//*((Control)control.Page.FindControl(resultTo)).ClientID*/
JSContent += "document.getElementById('" + control.Parent.Controls[1].ClientID + "')" + ValueSymbol;
JSContent += "=' "+falseText+"'";
JSContent += " \n document.getElementById('" + control.Parent.Controls[1].ClientID + "').style.color = '#ff0000';\n";
JSContent += "} \n else \n { \n document.getElementById('" + control.Parent.Controls[1].ClientID + "').value = ' "+trueText+"'; \n ";
JSContent += "document.getElementById('" + control.Parent.Controls[1].ClientID+ "').style.color = '#00ff33'; \n}";
JSContent += "\n} \n}\n</script>\n\n";
FunctionScript = JSHeader + JSContent;
return true;
}
internal bool RegisterScript(Page page)
{
if (OnBlurScript.Length == 0 || FunctionScript.Length == 0 || OnfocusScript.Length==0)
{
return false;
}
if (!page.ClientScript.IsClientScriptBlockRegistered(OnBlurScriptName))
{
page.ClientScript.RegisterClientScriptBlock(this.GetType(), OnBlurScriptName, FunctionScript, false);
}
if (!page.ClientScript.IsClientScriptBlockRegistered(OnfocusScriptName))
{
page.ClientScript.RegisterClientScriptBlock(this.GetType(), OnfocusScriptName, OnfocusScript, false);
}
if (!page.ClientScript.IsStartupScriptRegistered(OnLoadScriptName))
{
page.ClientScript.RegisterStartupScript(this.GetType(), OnLoadScriptName, OnBlurScript, false);
}
return true;
}
#endregion
}
}
源码下载