首页 > 应用开发 > IT综合 > 自定义DropDownList控件的实现
需求:要求DropDownList控件支持文本输入方式快速定位选择项。输入文本后按Tab键或Enter键触发SelectedIndexChanged事件。
Code:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Configuration;
namespace Com.Elong.Commission.WebControl
{
///
/// DropDownListExtend 的摘要说明。
///
[DefaultProperty("Text"),
ToolboxData("<{0}:DropDownListExtend runat=server>{0}:DropDownListExtend>")]
public class DropDownListExtend : System.Web.UI.WebControls.DropDownList,INamingContainer
{
private string NEWLINE = System.Environment.NewLine;
public TextBox _TextBox;
public DropDownListExtend()
{
_TextBox = new TextBox();
}
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string Text
{
get
{
return _TextBox.Text;
}
set
{
_TextBox.Text = value;
}
}
///
/// 将此控件呈现给指定的输出参数。
///
/// 要写出到的 HTML 编写器
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 + 0;
int spanWidth = sWidth - 18;
output.Write("
_TextBox.ID = base.ID +"_TextBox";
_TextBox.EnableViewState = true;
_TextBox.AutoPostBack = true;
_TextBox.Width = Unit.Parse(iWidth.ToString() + "px");
_TextBox.Style.Add("left", "0px");
_TextBox.Style.Add("POSITION", "absolute");
_TextBox.Attributes.Add("onchange","doSelect('" + base.ID + "'); ");
if(base.Items.Count == 0)
{
ListItem item = new ListItem();
item.Value = "";
item.Text = " --请选择-- ";
base.Items.Add(item);
base.SelectedIndex = 0;
_TextBox.Text = base.Items[0].Text;
}
if (base.SelectedItem != null)
{
_TextBox.Text = base.SelectedItem.Text;
}
_TextBox.RenderControl(output);
output.Write("");
base.Style.Clear();
base.Width = Unit.Parse(sWidth.ToString() + "px");
base.Style.Add("MARGIN-LEFT", "-" + spanWidth.ToString() + "px");
base.Attributes.Add("onchange", "document.all('" + this._TextBox.UniqueID + "').value=this.options[this.selectedIndex].text; ");
base.Render(output);
output.Write("");
output.Write("
WriteJSFunc(output);
}
private void WriteJSFunc(HtmlTextWriter output)
{
string jsFileURL = System.Configuration.ConfigurationSettings.AppSettings["WebControlJS"];
output.Write("");
}
////////////////采用外部javascript 文件连接,以增强可用性和维护性////////
///
// private void WriteJSFunc(HtmlTextWriter output)
// {
// output.Write("");
// }
// private void WriteKeyDownFunc(HtmlTextWriter output)
// {
// output.Write("function document.onkeydown() " + NEWLINE);
// output.Write("{" + NEWLINE);
// output.Write("if (event.keyCode == 13) " + NEWLINE);
// output.Write("{" + NEWLINE);
// output.Write("var e = event.srcElement; " + NEWLINE);
// output.Write(" if (e.tagName == "INPUT" && e.type == "text") " + NEWLINE);
// output.Write("event.keyCode = 9; " + NEWLINE);
// output.Write("} " + NEWLINE);
// output.Write("}" + NEWLINE);
// }
// private void WriteDoSelect(HtmlTextWriter output)
// {
// output.Write("function doSelect() " + NEWLINE);
// output.Write("{ " + NEWLINE);
// output.Write("var ddl = document.getElementById("" + base.UniqueID + "");" + NEWLINE);
// output.Write("var count = ddl.options.length;" + NEWLINE);
// output.Write("var selValue = document.all('" + this._TextBox.UniqueID +"').value;" + NEWLINE);
// output.Write("for (var i=0;i
// output.Write("if (ddl.options[i].text == selValue) " + NEWLINE);
// output.Write(" {" + NEWLINE);
// output.Write("ddl.options[i].selected = true;" + NEWLINE);
// output.Write("return;" + NEWLINE);
// output.Write(" }" + NEWLINE);
// output.Write(" }" + NEWLINE);
// output.Write(" alert('没找到查找项');" + NEWLINE);
// output.Write(" document.all('" + this._TextBox.UniqueID +"').value = ddl.options[0].text;" + NEWLINE);
// output.Write("}" + NEWLINE);
// }
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13651903/viewspace-1013858/ ,如需转载,请注明出处,否则将追究法律责任。