自定義TextBox控制元件的實現
需求:在實際應用開發中,經常需要查詢某些資料實體,返回其Name和ID,然後執行相關的業務操作。通常,透過一個“查詢”按鈕,彈出一個模態窗體,執行查詢,然後返回資料給父窗體。為了重用的需要,特開發一個TextBox控制元件,實現上述需求。
Code:
using System;
using System.ComponentModel;
using System.Text;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.ComponentModel.Design;
namespace Beyondsoft.GDMP.AspNetControls
{
///
/// 使用者選擇控制元件
///
[DefaultProperty("Text"),
ToolboxData("{0}:SelectTextBox>")]
public class SelectTextBox : WebControl, INamingContainer
{
protected System.Web.UI.HtmlControls.HtmlInputHidden hiddenObjectId;
protected System.Web.UI.WebControls.TextBox txtObjectName;
protected System.Web.UI.HtmlControls.HtmlButton button;
private HtmlTable uiTable;
public SelectTextBox()
{
CreateControls();
}
/**////
/// ID,ID中間使用","分隔
///
[Browsable(false),Category("設定"),Description("取得的物件值,中間使用','分隔"),DefaultValue("")]
public string Value
{
get
{
return hiddenObjectId.Value;
}
set
{
hiddenObjectId.Value=value.ToString();
}
}
/**////
/// 名稱,中間使用","分隔
///
[Browsable(false),Category("設定"),Description("物件名稱,中間使用','分隔"),DefaultValue("")]
public string Text
{
get
{
return txtObjectName.Text;
}
set
{
this.txtObjectName.Text = value.ToString();
}
}
[Category("設定"),Description("選擇頁面路徑"),Browsable(true), NotifyParentProperty(true)]
public string PageUrl
{
get
{
object obj=ViewState["PageUrl"];
return (obj==null)?string.Empty:obj.ToString();
}
set
{
ViewState["PageUrl"] = value;
}
}
/**////
/// 編輯框是否可見
///
[Category("設定"),Description("編輯框是否可見"),Browsable(true),DefaultValue(true)]
public bool IsVisable
{
get
{
object obj=ViewState["Visable"];
return (obj==null)?true:bool.Parse(obj.ToString());
}
set
{
ViewState["Visable"] = value;
}
}
/// 編輯框是否可輸入
///
[Category("設定"), Description("編輯框是否可輸入"), Browsable(true), DefaultValue(false)]
public bool TextBoxEnabled
{
get
{
object obj = ViewState["TextBoxEnabled"];
return (obj == null) ? false : bool.Parse(obj.ToString());
}
set
{
ViewState["TextBoxEnabled"] = value;
}
}
protected override void Render(HtmlTextWriter output)
{
this.button.Attributes.Add("onclick", string.Format("javascript:SetValue('{0}','{1}','{2}');", PageUrl, this.ClientID + "_ObjectName", this.ClientID + "_ObjectId"));
uiTable.RenderControl(output);
}
protected override void OnPreRender(EventArgs e)
{
RegisterClientScriptBlockJavaScript();
base.OnPreRender (e);
}
#region 發出客戶端指令碼 RegisterClientScriptBlockJavaScript()
private void RegisterClientScriptBlockJavaScript()
{
//如果已經註冊了指令碼則不再註冊
if(Page.ClientScript.IsClientScriptBlockRegistered("SetValue"))
{
return;
}
else
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "SetValue",SetValue().ToString());
}
}
public StringBuilder SetValue()
{
StringBuilder builder=new StringBuilder();
builder.Append("
return builder;
}
#endregion
private void CreateControls()
{
this.Width = Unit.Parse("100px");
uiTable = new HtmlTable();
//uiTable.ID = "uiTable";
uiTable.Width = "100%";
uiTable.Border = 0;
txtObjectName = new TextBox();
txtObjectName.ID = "ObjectName";
txtObjectName.Visible = this.IsVisable;
txtObjectName.Enabled = this.TextBoxEnabled;
txtObjectName.EnableViewState = true;
txtObjectName.AutoPostBack = false;
txtObjectName.Width = Unit.Parse("102px");
hiddenObjectId = new HtmlInputHidden();
hiddenObjectId.ID = "ObjectId";
this.button = new HtmlButton();
this.button.ID = "btnSelect";
this.button.Attributes.Add("Width","36");
this.button.InnerText = "選擇";
//this.button.Attributes.Add("onclick",string.Format("javascript:SetValue('{0}','{1}','{2}');",PageUrl,this.ClientID +"_ObjectName",this.ClientID+"_ObjectId"));
this.button.CausesValidation = false;
HtmlTableRow tr = new HtmlTableRow();
HtmlTableCell td = new HtmlTableCell();
td.Controls.Add(txtObjectName);
td.Controls.Add(hiddenObjectId);
td.Controls.Add(button);
tr.Cells.Add(td);
uiTable.Rows.Add(tr);
this.Controls.Add(uiTable);
}
}
}
模態窗體返回查詢值的Javascript程式碼:
...................
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13651903/viewspace-1013863/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 工作記錄--WPF自定義控制元件,實現一個可設定編輯模式的TextBox控制元件模式
- Qt實現自定義控制元件QT控制元件
- QT實現可拖動自定義控制元件QT控制元件
- 微信小程式Tree自定義控制元件實現微信小程式控制元件
- 基於 RecyclerView 實現的歌詞滾動自定義控制元件View控制元件
- EventSource的自定義實現
- 自定義控制元件實踐-帶特效的索引欄控制元件特效索引
- 自定義控制元件ViewPager控制元件Viewpager
- 自定義Switch控制元件控制元件
- 搶購倒數計時自定義控制元件的實現與優化控制元件優化
- VirtualView Android 實現詳解(三)—— 新增一個自定義控制元件ViewAndroid控制元件
- Flutter自定義View的實現FlutterView
- Flutter自定義Banner的實現Flutter
- 4. 自定義控制元件(4) --- 自定義屬性控制元件
- iOS實現ScrollView中子控制元件(Button,自定義View)的觸控事件響應iOSView控制元件事件
- 搶購倒數計時自定義控制元件的實現與最佳化控制元件
- iOS自定義控制元件 SlideriOS控制元件IDE
- iOS自定義控制元件 AlertViewiOS控制元件View
- iOS自定義控制元件 SegmentiOS控制元件
- winform 自定義容器控制元件ORM控制元件
- WPF Blend 自定義控制元件控制元件
- Flutter 之 自定義控制元件Flutter控制元件
- 自定義SpringMVC部分實現SpringMVC
- 自定義實現Complex類
- Android自定義拍照實現Android
- Net 實現自定義Aop
- 【android】自定義佈局控制控制元件的位置可以通過繼承FrameLayout實現Android控制元件繼承
- 簡單的自定義表單控制元件控制元件
- 如何開發FineReport的自定義控制元件?控制元件
- UWP自定義ToggleButton控制元件的樣式控制元件
- 自定義控制元件 --- 電池icon控制元件
- Flutter 自定義縮放控制元件Flutter控制元件
- AngularJS自定義表單控制元件AngularJS控制元件
- 【Android】自定義樹形控制元件Android控制元件
- iOS自定義控制元件:簡易下拉控制元件iOS控制元件
- JavaScript實現自定義的生命週期JavaScript
- 淺談如何實現自定義的 iterator
- CefSharp自定義快取實現快取
- 使用Guava的ComparisonChain實現自定義的排序GuavaAI排序