您的位置:首页 > 编程语言 > ASP

[导入][ASP.NET 控件实作 Day17] 集合属性包含不同型别的成员

2008-10-18 13:11 639 查看
我们知道在GridView的Columns集合属性中,可以包含不同型别的字段,如BoundFIeld、CheckBoxField、HyperLinkField...等不同型别的字段。如果我们希望工具列中不只包含按钮,可以包含其它不同类型的子控件,那该怎么做呢?本文就以上篇中的TBToolbar控件为案例,让Items集合属性可以加入Button、TextBox、Label...等不同的子控件。程序代码下载:ASP.NETServerControl-Day17.rar一、不同型别的集合成员我们的需求是让工具列可以加入Button、TextBox、Label三种子控件,所以继承原来的TBToolbarItem(只保留Enabled属性),新增了TBToolbarButton、TBToolbarTextbox、TBToolbarLabel三个类别。





这些新增的成员类别都是继承至TBToolbarItem,所以在aspx程序代码中,手动输入Items的成员时,就会列出这几种定义的成员型别。



二、建立不同型别集合成员的子控件因为Items属性的成员具不同型别,所以我们要改写RenderContents方法,判断成员型别来建立对应类型的子控件。若为TBToolbarButton型别建立Button控件、若为TBToolbarTextbox型别则建立TextBox控件、若为TBToolbarLabel型别则建立Label控件。其中TBToolbarButton建立的控件为TBButton,这个控件是我们在「[ASP.NET控件实作Day3]扩展现有服务器控件功能」一文中实作的具询问讯息的按钮控件。
'''<summary>
'''覆寫RenderContents方法。
'''</summary>
ProtectedOverridesSubRenderContents(ByValwriterAsSystem.Web.UI.HtmlTextWriter)
DimoItemAsTBToolbarItem
DimoControlAsControl
ForEachoItemInMe.Items
IfTypeOfoItemIsTBToolbarButtonThen
'建立Button控制項
oControl=CreateToolbarButton(CType(oItem,TBToolbarButton))
ElseIfTypeOfoItemIsTBToolbarTextboxThen
'建立Textbox控制項
oControl=CreateToolbarTextbox(CType(oItem,TBToolbarTextbox))
Else
'建立Label控制項
oControl=CreateToolbarLabel(CType(oItem,TBToolbarLabel))
EndIf
Me.Controls.Add(oControl)
Next
MyBase.RenderContents(writer)
EndSub
'''<summary>
'''建立工具列按鈕。
'''</summary>
PrivateFunctionCreateToolbarButton(ByValItemAsTBToolbarButton)AsControl
DimoButtonAsTBButton
DimsScriptAsString
oButton=NewTBButton()
oButton.Text=Item.Text
oButton.Enabled=Item.Enabled
oButton.ID=Item.Key
oButton.ConfirmMessage=Item.ConfirmMessage
sScript=Me.Page.ClientScript.GetPostBackEventReference(Me,Item.Key)
oButton.OnClientClick=sScript
ReturnoButton
EndFunction
'''<summary>
'''建立工具列文字框。
'''</summary>
PrivateFunctionCreateToolbarTextbox(ByValItemAsTBToolbarTextbox)AsControl
DimoTextBoxAsTextBox
oTextBox=NewTextBox
ReturnoTextBox
EndFunction
'''<summary>
'''建立工具列標籤。
'''</summary>
PrivateFunctionCreateToolbarLabel(ByValItemAsTBToolbarLabel)AsControl
DimoLabelAsLabel
oLabel=NewLabel()
oLabel.Text=Item.Text
ReturnoLabel
EndFunction

.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}

我们手动在aspx程序代码中输入不同型别的成员,TBToolbar控件就会呈现对应的子控件。




三、执行程序
执行程序,就可以在浏览器看到呈现的工具列,当按下「删除」时也会出现我们定义的询问讯息。





输出的HTML码如下

<spanid="TBToolbar1">
<inputtype="submit"name="TBToolbar1$Add"value="新增"onclick="__doPostBack('TBToolbar1','Add');"id="TBToolbar1_Add"/>
<inputtype="submit"name="TBToolbar1$Edit"value="修改"onclick="__doPostBack('TBToolbar1','Edit');"id="TBToolbar1_Edit"/>
<inputtype="submit"name="TBToolbar1$Delete"value="刪除"onclick="if(confirm('確定刪除嗎?')==false){returnfalse;}__doPostBack('TBToolbar1','Delete');"id="TBToolbar1_Delete"/>
<span>關鍵字</span>
<inputname="TBToolbar1$ctl01"type="text"/>
<inputtype="submit"name="TBToolbar1$Search"value="搜尋"onclick="__doPostBack('TBToolbar1','Search');"id="TBToolbar1_Search"/>
</span>

.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}

备注:本文同步发布于「第一届iT邦帮忙铁人赛」,如果你觉得这篇文章对您有帮助,记得连上去推鉴此文增加人气^^
http://ithelp.ithome.com.tw/question/10012600

[新闻]Google关闭其中一家总部员工餐厅
博客园首页社区新闻频道小组博问网摘闪存
文章来源:http://www.cnblogs.com/jeff377/archive/2008/10/18/1314028.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: