1. 程式人生 > >asp.net DropDownList 可輸可選 下拉選單

asp.net DropDownList 可輸可選 下拉選單

自定義Controls類

using System;
using System.Collections;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Controls
{
    [ToolboxData("<{0}:DropDownListExtend runat=\"server\" />")]
    public class DropDownListExtend : System.Web.UI.WebControls.TextBox
    {
        private Hashtable _values;
        private DropDownList _DropDownList;
        public DropDownListExtend()
        {
            _values = new Hashtable();
            _DropDownList = new DropDownList();
        }

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

        protected override void Render(HtmlTextWriter output)
        {

            int iWidth = Convert.ToInt32(base.Width.Value);
            if (iWidth == 0)
            {
                iWidth = 102;
                base.Width = Unit.Parse("102px");
            }
            int sWidth = iWidth + 20;
            int spanWidth = sWidth - 18;
            output.Write("<div style=\"POSITION:relative;\">");
            output.Write("<span style=\"MARGIN-LEFT:" + spanWidth.ToString() + "px;OVERFLOW:hidden;WIDTH:14px;\">");
            _DropDownList.Width = Unit.Parse(sWidth.ToString() + "px");
            _DropDownList.Height = Unit.Parse("21px");
            _DropDownList.Style.Add("MARGIN-LEFT", "-" + spanWidth.ToString() + "px");
            _DropDownList.ID = base.ID + "_Select";
            _DropDownList.Attributes.Add("onchange", "this.parentNode.nextSibling.value=this.value");
            _DropDownList.Attributes.Add("onfocus", "" + this.getFocusScript() + "");

            if (_values.Count > 0)
            {
                foreach (string key in _values.Keys)
                {
                    ListItem item = new ListItem();
                    item.Value = key;
                    item.Text = _values[key].ToString();
                    _DropDownList.Items.Add(item);
                }
            }
            _DropDownList.RenderControl(output);
            output.Write("</span>");
            base.Style.Clear();
            base.Width = Unit.Parse(iWidth.ToString() + "px");
            base.Style.Add("left", "0px");
            base.Style.Add("POSITION", "absolute");
            base.Render(output);

            output.Write("</div>");
        }
        private string getFocusScript()
        {
            string strScript = "\n";
            strScript += "var isExist = -2;\n";
            strScript += "var obj = event.srcElement;\n";
            strScript += "var str = this.parentNode.nextSibling.value;\n";
            strScript += "var ary = obj.options;\n";
            strScript += "for(var i=0;i<ary.length;i++){\n";
            strScript += " if(str == ary[i].text){\n";
            strScript += "  isExist = i;\n";
            strScript += "  break;\n";
            strScript += " }\n";
            strScript += "}\n";
            strScript += "if(isExist != -2){\n";
            strScript += " obj.selectedIndex = isExist;\n";
            strScript += "}\n";
            strScript += "else{\n";
            strScript += " obj.selectedIndex = -1;\n";
            strScript += "}\n";

            return strScript;
        }
    }
}


在.aspx頁面引用

頁面最上邊新增

<%@ Register Assembly="Controls" Namespace="Controls" TagPrefix="hc" %>

呼叫自定義的可輸入可選擇的下拉選單
<hc:DropDownListExtend runat ="server" ID ="NewDropDownList"  Width="100px">
</hc:DropDownListExtend>

在後臺.aspx.cs給控制元件新增資料

新增using Controls;並且在bin檔案新增Controls引用

protected void Page_Load(object sender, EventArgs e)
{
	if (!IsPostBack)
        {
		NewDropDownList.Values.Add("1", "A");
		NewDropDownList.Values.Add("2", "B");
		NewDropDownList.Values.Add("3", "C");
		//用NewDropDownList.Text.ToString()取值
	}
}