asp.net DropDownList 可輸可選 下拉選單
阿新 • • 發佈:2019-02-04
自定義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()取值 } }