菜鸟也能煮酒论英雄
他山之石,可以攻玉。善于从他人处汲取营养的人,才能不断地取长补短,使自己走向成功


通过这个控件,可以判断你输入的文本框中的内容是否与你已经存在的数据或者是数据集中的数据相等(当焦点离开该控件的时候),并且根据你输入的要提示的信息来提示输入的是否是正确的:比如用户注册的时候,你可以用来判断用户名是否已经存在,以便快速的提示给注册的用户。它自带要提示的信息的属性,可以在文本框的后面进行提示。空间的数据集为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
    {
        
//定义属性
        All Property

        
//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
    
{
        
Properties

        
All OverrideMethod
    }

}

 

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

        
Method
    }

}

源码下载

posted on 2007-07-07 07:40  江太公  阅读(1289)  评论(37编辑  收藏  举报