可输入的下拉框的复合控件

来源:互联网 发布:vivoy67怎么设置网络 编辑:程序博客网 时间:2024/05/16 04:50

前段时间,要做一个可输入的下拉框,在网上查了一些资料,自己做了一个。总体的思想是用一个文本框和下拉框做,将他们的位置用样式来控制,并用Render方法来控制输出。具体实现如下:

(1)新建一个Web控项

using System;
using System.Collections;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.Design;

namespace MyWebControl
{
    ///   <summary>  
    ///   WebCustomControl1的摘要说明, 带输入框的下拉框  
    ///   </summary>  
    [DefaultProperty("Text"),
    ToolboxData("<{0}:WebCustomControl1   runat=server></{0}:WebCustomControl1>")]


    public class WebCustomControl1 : System.Web.UI.WebControls.WebControl, INamingContainer
    {
        private TextBox textBox;  //用于输入的文本框
        private DropDownList ddlListItem;//下拉框
        private Hashtable values;//用于绑定下拉框框的值

        public Hashtable Values
        {
            get
            {
                return values;
            }
            set
            {
                values = value;
            }
        }


        public WebCustomControl1() //初始化该控件
        {
            textBox = new TextBox();
            textBox.ID = "textBox";//用于当下拉框改变时用的!
            values = new Hashtable();
            textBox.Style.Add("border", "0px");
            ddlListItem = new DropDownList();
          
        }

 
        protected override void Render(HtmlTextWriter writer)
        {
            int iWidth = Convert.ToInt32(base.Width.Value);
            //设置方本框和下拉框的大小
            if(iWidth==0)
            {
                textBox.Width = Unit.Parse("75px");
                ddlListItem.Width = Unit.Parse("100px");
            }
            else
            {
                textBox.Width =Unit.Parse(iWidth+"px");
                int ddlWidth=iWidth+25;
                ddlListItem.Width = Unit.Parse(ddlWidth + "px");
            }
            writer.Write("<span style='position:relative'>");
            //初始化下框!
            if (values.Count >0)
            {
                foreach (string key in values.Keys)
                {
                    ListItem item = new ListItem();
                    item.Text = key;
                    item.Value = key;
                    ddlListItem.Items.Add(key);
                }
            }
            //当只有个选项时!
            if (values.Count == 1)
            {
                textBox.Text = ddlListItem.Items[0].Text;
            }
            //多处选项时,先将第一个选项选中,如果没有这个判断,当加载时选第一个时不能选中!
            if (values.Count > 1)
            {
                textBox.Text = ddlListItem.Items[0].Text;
            }
            //下拉框选项改变时激发的javascript事件,但也可以做成服务器事件!
            ddlListItem.Attributes.Add("onchange", "document.getElementById('textBox').value=this.value");
            ddlListItem.RenderControl(writer);
            writer.Write("<span style='position:absolute;left:1px;width:100px;'>");
            textBox.RenderControl(writer);
            base.Render(writer);
            writer.Write("</span></span>");
            writer.Flush();
            writer.Close();           
        }
       
    }
}

 

以上就是具体实现

原创粉丝点击