自定義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>")]
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部落格 ” ,連結:http://blog.itpub.net/13651903/viewspace-1013858/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Qt實現自定義控制元件QT控制元件
- 自定義TextBox控制元件的實現控制元件
- 微信小程式Tree自定義控制元件實現微信小程式控制元件
- QT實現可拖動自定義控制元件QT控制元件
- Android自定義控制元件之自定義ViewGroup實現標籤雲Android控制元件View
- DropDownList控制元件的基本用法控制元件
- 基於 RecyclerView 實現的歌詞滾動自定義控制元件View控制元件
- EventSource的自定義實現
- 自定義View:畫布實現自定義View(折線圖的實現)View
- 自定義View:自定義屬性(自定義按鈕實現)View
- 栗子——自定義EditText實現右下角計數控制元件控制元件
- Android自定義日曆控制元件的實現過程詳解Android控制元件
- Android自定義控制元件之自定義組合控制元件Android控制元件
- Flutter自定義Banner的實現Flutter
- Flutter自定義View的實現FlutterView
- Android自定義控制元件——自定義屬性Android控制元件
- 自定義控制元件實踐-帶特效的索引欄控制元件特效索引
- WPF 自定義控制元件的坑(蠢的:自定義控制元件內容不顯示)控制元件
- 搶購倒數計時自定義控制元件的實現與優化控制元件優化
- Android自定義控制元件系列之圓形進度條的實現Android控制元件
- 自定義Switch控制元件控制元件
- 自定義控制元件ViewPager控制元件Viewpager
- 控制元件自定義位置控制元件
- 如何自定義控制元件控制元件
- 自定義控制元件實踐-倒數計時控制元件控制元件
- 自定義的ValidationSummary控制元件控制元件
- C#自定義控制元件:如果定義控制元件的事件C#控制元件事件
- 4. 自定義控制元件(4) --- 自定義屬性控制元件
- Android自定義控制元件之自定義屬性Android控制元件
- Net 實現自定義Aop
- 微信分享自定義實現
- 搶購倒數計時自定義控制元件的實現與最佳化控制元件
- Android右滑關閉Activity介面功能-自定義控制元件實現Android控制元件
- Android Paint應用之自定義View實現進度條控制元件AndroidAIView控制元件
- Android自定義控制元件之實現一個球賽比分條Android控制元件
- Android開發自定義控制元件實現一個餅狀圖Android控制元件
- Android 自定義控制元件實現刮刮卡效果 真的就只是刮刮卡麼Android控制元件
- Android開發自定義控制元件實現一個折線圖Android控制元件