using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Collections; [assembly: TagPrefix("ServerControl", "hxy")] namespace ServerControl { [Designer("ServerControl.ExtendDorpDownListDesigner")] [ToolboxData("<{0}:YgExtendDropDownList runat=server></{0}:hxyExtendDropDownList>")] public class hxyExtendDropDownList : CompositeControl { TextBox tb; TextBox tbHidden; private DropDownList _DropDownList; public YgExtendDropDownList() { _DropDownList = new DropDownList(); } #region 属性 /// <summary> /// 文本 /// </summary> [Bindable(true), Category("自定义"), Description("文本")] public string Text { get { if (ViewState["DropDown_tb"] != null) return ViewState["DropDown_tb"].ToString(); else return tb.Text; } set { if (tb != null) tb.Text = value; else ViewState["DropDown_tb"] = value; } } /// <summary> /// 值 /// </summary> [Bindable(true), Category("自定义"), Description("值")] public string Value { get { if (ViewState["DropDown_tbHidden"] != null) return ViewState["DropDown_tbHidden"].ToString(); else return tbHidden.Text; } set { if (tbHidden != null) tbHidden.Text = value; else ViewState["DropDown_tbHidden"] = value; } } [Bindable(true), Category("自定义"), Description("数据源")] public Hashtable DataValues { get { if (ViewState["DropDown_Values"] == null) return new Hashtable(); else return (Hashtable)ViewState["DropDown_Values"]; } set { ViewState["DropDown_Values"] = value; } } #endregion /// <summary> /// 创建子控件 /// </summary> protected override void CreateChildControls() { Controls.Clear(); _DropDownList.ID = base.ID + "_Select"; tbHidden = new TextBox(); tbHidden.ID = this.ID + "_Hidden"; tbHidden.Attributes.Add("style", "display:none"); this.Controls.Add(tbHidden); tb = new TextBox(); tb.CssClass = "NormalTextBox"; tb.Text = this.Text; tb.ID = this.ID + "_Text"; tb.Attributes.Add("onkeyup", getChangeScript()); this.Controls.Add(tb); } protected override void Render(HtmlTextWriter output) { if (!DesignMode) { int iWidth = Convert.ToInt32(base.Width.Value); if (iWidth == 0) { iWidth = 102; tb.Width = Unit.Parse("102px"); } else { tb.Width = Unit.Parse(iWidth + "px"); } int sWidth = iWidth + 22; output.Write("<div style="/" mce_style="/""POSITION:relative/">"); output.Write("<span>"); _DropDownList.Width = Unit.Parse(sWidth.ToString() + "px"); _DropDownList.Attributes.Add("onchange", "document.getElementById('" + tb.ClientID + "').value=this.options[this.selectedIndex].text;document.getElementById('" + tbHidden.ClientID + "').value=this.options[this.selectedIndex].value"); _DropDownList.Attributes.Add("onfocus", "" + this.getFocusScript() + ""); if (DataValues.Count > 0) { foreach (string key in DataValues.Keys) { ListItem item = new ListItem(); item.Value = key; item.Text = DataValues[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 = document.getElementById('" + tb.ClientID + "').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; } private string getChangeScript() { string strScript = "/n"; strScript += "var i=0;"; strScript += "var obj = event.srcElement;/n"; strScript += "var ary = document.getElementById('" + _DropDownList.ClientID + "').options;/n"; strScript += "var str = this.value;/n"; strScript += "for(var i=0;i<ary.length;i++){/n"; strScript += " if(str == ary[i].text)/n"; strScript += "{document.getElementById('" + tbHidden.ClientID + "').value=ary[i].value;i++;return;}"; strScript += "if(i==0) {document.getElementById('" + tbHidden.ClientID + "').value='';}"; strScript += "}"; return strScript; } } } 以上主要代码,如果有需要请联系我