TextBox自定义复合控件(复合验证TextBox)有源码下载

通过这个控件,可以判断你输入的文本框中的内容是否与你已经存在的数据或者是数据集中的数据相等(当焦点离开该控件的时候),并且根据你输入的要提示的信息来提示输入的是否是正确的:比如用户注册的时候,你可以用来判断用户名是否已经存在,以便快速的提示给注册的用户。它自带要提示的信息的属性,可以在文本框的后面进行提示。空间的数据集为object,支持多种数据类型:可以是单个的数据源,也可以为数组,arraylist,datatable、dataset等数据集。

主类:(ValidTextBox.cs)

//复合自定义控件源码:

using System;
using System.Data;
using System.Drawing;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using DJControl.DJTextBox.Valid.DataBind;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DJControl.DJTextBox.Valid
{
    //创建一个由TextBox 组成的简单的复合控件
    //复合控件类应该通过从 CompositeControl 继承开始
    [DefaultProperty("DataField"), ToolboxData("<{0}:ValidTextBox runat=server></{0}:ValidTextBox>")]
    public class ValidTextBox : CompositeControl //WebControl
    {
        //定义属性
        #region All Property
        [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


        //CreateChildControls 方法
        /*
         * 我们的复合控件由一个标签和一个文本框组成。
         * 我们无法使用简单控件的技术来显示这两个标记,除非使用强制方式和 Render() 方法。
         * 因为我们希望利用自适应呈现并显示我们的两个控件,
         * 所以我们需要覆盖内置到 CompositeControl 类中的 CreateChildControls() 方法。
         * 这种方法使我们可以定义控件,并将我们的复合控件的属性传递到要显示的单个控件中。
         */

        protected override void CreateChildControls()
        {
            System.Web.UI.WebControls.TextBox tb = new System.Web.UI.WebControls.TextBox();
            DJTextBox.Valid.DataBind.TextBox mytxtbox = new DJTextBox.Valid.DataBind.TextBox();
            this.Controls.Add(mytxtbox);
            this.Controls.Add(tb);

            //add System TextBox
            tb.Text = "  *";
            tb.ForeColor = Color.Red;
            tb.BorderWidth = 0;
                tb.ReadOnly=true;

            //add My TextBox
            mytxtbox.DataSource = this.DataSource;
            mytxtbox.DataField = this.DataField;
            mytxtbox.TrueText = this.TrueText;
            mytxtbox.FalseText = this.FalseText;
            mytxtbox.BorderColor = Color.Silver;
            mytxtbox.BorderStyle = BorderStyle.Solid;
            mytxtbox.BorderWidth = 1;


            //call the parent method
            base.CreateChildControls();
        }
        //注意,我们必须初始化每个控件、分配所有属性,然后将控件添加到内置到 CompositeControl 类中的 Controls 集合。
        //我们还使用了 Literal 对象将换行符置于标签和控件之间。Literal 对象是非常简单的控件,您可以使用它在功能元素之间插入原始 HTML。

        //protected override void RenderContents(HtmlTextWriter output)
        //{
        //    output.Write(Text);
        //}

        //protected override void OnPreRender(EventArgs e)
        //{
        //    base.OnPreRender(e);
        //}
    }
}


自定义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
    
}

 

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
    {
        #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


        #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 + "').οnblur=" + OnBlurScriptName + ";/n";
            OnBlurScript += "/n /n document.getElementById('" + control.Parent.Controls[0].ClientID + "').οnfοcus=" + 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

    }

}

源码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值