asp.net DropDownList 可输可选 下拉菜单

原创 2013年12月04日 18:15:05

自定义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()取值
	}
}


相关文章推荐

asp.net GridView和下拉菜单DropDownList结合

后台代码: using System; using System.Data; using System.Configuration; using System.Collections; us...
  • guozh90
  • guozh90
  • 2012年04月18日 21:46
  • 539

asp.net页面中Menu控件下拉菜单被frame挡住和iframe自适应高度的解决办法

 当你在做一个仿windows程序的顶部菜单框架的时候,在asp.net中你可能会使用两个frame,一个frame在上面用来放菜单一个frame在下面用来方菜单点击后打开的页面.页面实现很简单,单运...

asp.net之实现动态创建下拉菜单和日历的选择

这个问题纠结了好久,一直想用select实现动态创建下拉列表的效果,但是select中没有AutoPostBack 所以调用onServerChange时没有实现跳转, 具体的大家可以参照一下这个...

asp.net无刷新二级联动下拉菜单

  • 2012年04月16日 23:10
  • 1KB
  • 下载

可选风格下拉菜单

index.html --请选择-- 风格一 风格二 风格三 function chengestyle(){ result=docu...
  • Oo__YAN
  • Oo__YAN
  • 2011年11月23日 20:39
  • 713

ASP.NET自定义Web服务器控件-DropDownList/Select下拉列表控件

using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin...

GridView和下拉菜单DropDownList结合

  • 2015年09月08日 17:55
  • 66KB
  • 下载

可输可选的DropDownList

  • 2011年06月10日 11:08
  • 60KB
  • 下载

GridView和下拉菜单DropDownList结合

后台代码: using System; using System.Data; using System.Configuration; using System.Collections; us...
  • guozh90
  • guozh90
  • 2012年04月13日 14:45
  • 321
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asp.net DropDownList 可输可选 下拉菜单
举报原因:
原因补充:

(最多只允许输入30个字)