Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)归海一刀published in(发表于) 2014/1/30 1:10:28 扩展DropDownList控件和ListBox控件(1),-,支持分组功能(optgroup标签)_[Asp.Net教程]
DropDownList(ListBox)控件既强大又好用。为了让它更强大、更好用,我们来写一个继承自DropDownList(ListBox)的控件。介绍扩展DropDownList控件和ListBox控件:通过DropDownList控件和ListBox控件的.Items.Add(ListItem item)方法,来为其添加optgroup标签,从而实现分组功能使用方法1、设置属性:OptionGroupValue - 用于添加DropDownList(ListBox)控件的分组项的ListItem的Value值(默认为optgroup)2、使用DropDownList(ListBox)控件的.Items.Add(ListItem item)方法:OptionGroupValue为默认值时:SmartDropDownList.Items.Add(new ListItem("中国", "optgroup"));图示关键代码(以DropDownList为例)SmartDropDownList.cs
using System;using System.Collections.Generic;using System.Text;
using System.Web.UI.WebControls;using System.Web.UI;
[assembly: System.Web.UI.WebResource("YYControls.SmartDropDownList.Resources.Icon.bmp", "image/bmp")]
namespace YYControls{/**//// /// SmartDropDownList类,继承自DropDownList/// [ToolboxData(@"<{0}:SmartDropDownList runat='server'>")][System.Drawing.ToolboxBitmap(typeof(YYControls.Resources.Icon), "SmartDropDownList.bmp")]public partial class SmartDropDownList : DropDownList{/**//// /// 构造函数/// public SmartDropDownList(){
}
/**//// /// 将控件的内容呈现到指定的编写器中/// /// writerprotected override void RenderContents(HtmlTextWriter writer) {// 呈现Option或OptionGroupOptionGroupRenderContents(writer);}}}Property.csusing System;using System.Collections.Generic;using System.Text;
using System.ComponentModel;using System.Web.UI;
namespace YYControls{/**//// /// SmartDropDownList类的属性部分/// public partial class SmartDropDownList{/**//// /// 用于添加SmartDropDownList的分组项的ListItem的Value值/// [Browsable(true),Description("用于添加DropDownList的分组项的ListItem的Value值"),Category("扩展")]public virtual string OptionGroupValue{get{string s = (string)ViewState["OptionGroupValue"];
return (s == null) ? "optgroup" : s;}set{ViewState["OptionGroupValue"] = value;}}}}OptionGroup.csusing System;using System.Collections.Generic;using System.Text;
using System.Data;using System.Web.UI.WebControls;using System.Web.UI;using System.Web;
namespace YYControls{/**//// /// SmartDropDownList类的属性部分/// public partial class SmartDropDownList{/**//// /// 呈现Option或OptionGroup/// /// writerprivate void OptionGroupRenderContents(HtmlTextWriter writer){// 是否需要呈现OptionGroup的EndTagbool writerEndTag = false;
foreach (ListItem li in this.Items){// 如果没有optgroup属性则呈现Optionif (li.Value != this.OptionGroupValue){// 呈现OptionRenderListItem(li, writer);}// 如果有optgroup属性则呈现OptionGroupelse{if (writerEndTag)// 呈现OptionGroup的EndTagOptionGroupEndTag(writer);elsewriterEndTag = true;
// 呈现OptionGroup的BeginTagOptionGroupBeginTag(li, writer);}}
if (writerEndTag)// 呈现OptionGroup的EndTagOptionGroupEndTag(writer);}
/**//// /// 呈现OptionGroup的BeginTag/// /// OptionGroup数据项/// writerprivate void OptionGroupBeginTag(ListItem li, HtmlTextWriter writer){writer.WriteBeginTag("optgroup");// 写入OptionGroup的labelwriter.WriteAttribute("label", li.Text);
foreach (string key in li.Attributes.Keys){// 写入OptionGroup的其它属性writer.WriteAttribute(key, li.Attributes[key]);}
writer.Write(HtmlTextWriter.TagRightChar);writer.WriteLine();}
/**//// /// 呈现OptionGroup的EndTag/// /// writerprivate void OptionGroupEndTag(HtmlTextWriter writer){writer.WriteEndTag("optgroup");writer.WriteLine();}
/**//// /// 呈现Option/// /// Option数据项/// writerprivate void RenderListItem(ListItem li, HtmlTextWriter writer){writer.WriteBeginTag("option");
// 写入Option的Valuewriter.WriteAttribute("value", li.Value, true);
if (li.Selected){// 如果该Option被选中则写入selectedwriter.WriteAttribute("selected", "selected", false);}
foreach (string key in li.Attributes.Keys){// 写入Option的其它属性writer.WriteAttribute(key, li.Attributes[key]);}
writer.Write(HtmlTextWriter.TagRightChar);
// 写入Option的TextHttpUtility.HtmlEncode(li.Text, writer);
writer.WriteEndTag("option");writer.WriteLine();}}}
作者:webabcd 来源:http://www.cnblogs.com/webabcd/
赞