扩展DropDownList控件和ListBox控件(1) - 支持分组功能(optgroup标签)

简介:
DropDownList(ListBox)控件 既强大又好用。为了让它更强大、更好用,我们来写一个继承自 DropDownList(ListBox) 的控件。
[源码下载]


扩展DropDownList控件和ListBox控件(1) - 支持分组功能(optgroup标签)


作者: webabcd


介绍
扩展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
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Text; 
InBlock.gif 
InBlock.gif using System.Web.UI.WebControls; 
InBlock.gif using System.Web.UI; 
InBlock.gif 
InBlock.gif[assembly: System.Web.UI.WebResource( "YYControls.SmartDropDownList.Resources.Icon.bmp""image/bmp")] 
InBlock.gif 
InBlock.gif namespace YYControls 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// SmartDropDownList类,继承自DropDownList 
InBlock.gif         /// </summary> 
InBlock.gif        [ToolboxData( @"<{0}:SmartDropDownList runat='server'></{0}:SmartDropDownList>")] 
InBlock.gif        [System.Drawing.ToolboxBitmap( typeof(YYControls.Resources.Icon),  "SmartDropDownList.bmp")] 
InBlock.gif         public partial  class SmartDropDownList : DropDownList 
InBlock.gif        { 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 构造函数 
InBlock.gif                 /// </summary> 
InBlock.gif                 public SmartDropDownList() 
InBlock.gif                { 
InBlock.gif 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 将控件的内容呈现到指定的编写器中 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <param name="writer">writer</param> 
InBlock.gif                 protected  override  void RenderContents(HtmlTextWriter writer)    
InBlock.gif                { 
InBlock.gif                         // 呈现Option或OptionGroup 
InBlock.gif                        OptionGroupRenderContents(writer); 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
 
Property.cs
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Text; 
InBlock.gif 
InBlock.gif using System.ComponentModel; 
InBlock.gif using System.Web.UI; 
InBlock.gif 
InBlock.gif namespace YYControls 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// SmartDropDownList类的属性部分 
InBlock.gif         /// </summary> 
InBlock.gif         public partial  class SmartDropDownList 
InBlock.gif        { 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 用于添加SmartDropDownList的分组项的ListItem的Value值 
InBlock.gif                 /// </summary> 
InBlock.gif                [ 
InBlock.gif                Browsable( true), 
InBlock.gif                Description( "用于添加DropDownList的分组项的ListItem的Value值"), 
InBlock.gif                Category( "扩展"
InBlock.gif                ] 
InBlock.gif                 public  virtual  string OptionGroupValue 
InBlock.gif                { 
InBlock.gif                        get 
InBlock.gif                        { 
InBlock.gif                                 string s = ( string)ViewState[ "OptionGroupValue"]; 
InBlock.gif 
InBlock.gif                                 return (s ==  null) ?  "optgroup" : s; 
InBlock.gif                        } 
InBlock.gif                        set 
InBlock.gif                        { 
InBlock.gif                                ViewState[ "OptionGroupValue"] = value; 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
 
OptionGroup.cs
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Text; 
InBlock.gif 
InBlock.gif using System.Data; 
InBlock.gif using System.Web.UI.WebControls; 
InBlock.gif using System.Web.UI; 
InBlock.gif using System.Web; 
InBlock.gif 
InBlock.gif namespace YYControls 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// SmartDropDownList类的属性部分 
InBlock.gif         /// </summary> 
InBlock.gif         public partial  class SmartDropDownList 
InBlock.gif        { 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 呈现Option或OptionGroup 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <param name="writer">writer</param> 
InBlock.gif                 private  void OptionGroupRenderContents(HtmlTextWriter writer) 
InBlock.gif                { 
InBlock.gif                         // 是否需要呈现OptionGroup的EndTag 
InBlock.gif                         bool writerEndTag =  false
InBlock.gif 
InBlock.gif                         foreach (ListItem li  in  this.Items) 
InBlock.gif                        { 
InBlock.gif                                 // 如果没有optgroup属性则呈现Option 
InBlock.gif                                 if (li.Value !=  this.OptionGroupValue) 
InBlock.gif                                { 
InBlock.gif                                         // 呈现Option 
InBlock.gif                                        RenderListItem(li, writer); 
InBlock.gif                                } 
InBlock.gif                                 // 如果有optgroup属性则呈现OptionGroup 
InBlock.gif                                 else 
InBlock.gif                                { 
InBlock.gif                                         if (writerEndTag) 
InBlock.gif                                                 // 呈现OptionGroup的EndTag 
InBlock.gif                                                OptionGroupEndTag(writer); 
InBlock.gif                                         else 
InBlock.gif                                                writerEndTag =  true
InBlock.gif 
InBlock.gif                                         // 呈现OptionGroup的BeginTag 
InBlock.gif                                        OptionGroupBeginTag(li, writer); 
InBlock.gif                                } 
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                         if (writerEndTag) 
InBlock.gif                                 // 呈现OptionGroup的EndTag 
InBlock.gif                                OptionGroupEndTag(writer); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 呈现OptionGroup的BeginTag 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <param name="li">OptionGroup数据项</param> 
InBlock.gif                 /// <param name="writer">writer</param> 
InBlock.gif                 private  void OptionGroupBeginTag(ListItem li, HtmlTextWriter writer) 
InBlock.gif                { 
InBlock.gif                        writer.WriteBeginTag( "optgroup"); 
InBlock.gif                         
InBlock.gif                         // 写入OptionGroup的label 
InBlock.gif                        writer.WriteAttribute( "label", li.Text); 
InBlock.gif 
InBlock.gif                         foreach ( string key  in li.Attributes.Keys) 
InBlock.gif                        { 
InBlock.gif                                 // 写入OptionGroup的其它属性 
InBlock.gif                                writer.WriteAttribute(key, li.Attributes[key]); 
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                        writer.Write(HtmlTextWriter.TagRightChar); 
InBlock.gif                        writer.WriteLine(); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 呈现OptionGroup的EndTag 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <param name="writer">writer</param> 
InBlock.gif                 private  void OptionGroupEndTag(HtmlTextWriter writer) 
InBlock.gif                { 
InBlock.gif                        writer.WriteEndTag( "optgroup"); 
InBlock.gif                        writer.WriteLine(); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 呈现Option 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <param name="li">Option数据项</param> 
InBlock.gif                 /// <param name="writer">writer</param> 
InBlock.gif                 private  void RenderListItem(ListItem li, HtmlTextWriter writer) 
InBlock.gif                { 
InBlock.gif                        writer.WriteBeginTag( "option"); 
InBlock.gif 
InBlock.gif                         // 写入Option的Value 
InBlock.gif                        writer.WriteAttribute( "value", li.Value,  true); 
InBlock.gif 
InBlock.gif                         if (li.Selected) 
InBlock.gif                        { 
InBlock.gif                                 // 如果该Option被选中则写入selected 
InBlock.gif                                writer.WriteAttribute( "selected""selected"false); 
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                         foreach ( string key  in li.Attributes.Keys) 
InBlock.gif                        { 
InBlock.gif                                 // 写入Option的其它属性 
InBlock.gif                                writer.WriteAttribute(key, li.Attributes[key]); 
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                        writer.Write(HtmlTextWriter.TagRightChar); 
InBlock.gif 
InBlock.gif                         // 写入Option的Text 
InBlock.gif                        HttpUtility.HtmlEncode(li.Text, writer); 
InBlock.gif 
InBlock.gif                        writer.WriteEndTag( "option"); 
InBlock.gif                        writer.WriteLine(); 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
 


     本文转自webabcd 51CTO博客,原文链接: http://blog.51cto.com/webabcd/345425 ,如需转载请自行联系原作者

相关文章
|
2月前
easyui-combobox 下拉列表排序
easyui-combobox 下拉列表排序
20 0
|
4月前
|
C++
C++ Qt开发:RadioButton单选框分组组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`QRadioButton`单选框组件以及与之交互的`QButtonGroup`类的常用方法及灵活运用。`QRadioButton`是Qt框架中的一个部件(Widget),用于提供单选按钮的界面元素。单选按钮允许用户从多个互斥的选项中选择一个,通常用于表示一组相关但互斥的选项。
61 0
C++ Qt开发:RadioButton单选框分组组件
|
移动开发 缓存 JavaScript
EasyUI的相关操作与DataGrid基本属性
easyui是基于jQuery、Angular.、Vue和React的用户界面组件的集合。 easyui提供了构建现代交互式javascript应用程序的基本功能。 使用easyui,您不需要编写许多javascript代码,通常通过编写一些HTML标记来定义用户界面。 完整的HTML5网页框架。 使用easyui开发你的产品时可以大量节省你的时间和规模。 easyui使用非常简单但功能非常强大。
|
C#
在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色
原文:在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色 在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色 例如根据学生的年龄来修改,年龄小...
2910 0
|
C#
WPF DataGrid 每行ComboBox 内容不同的设置方法
原文:WPF DataGrid 每行ComboBox 内容不同的设置方法 ...
1049 0
|
C# C++
WPF - Group分组对ListBox等列表样式的约束
原文:WPF - Group分组对ListBox等列表样式的约束   在做WPF主题支持时,出现一个分组引起的莫名错误,可是折腾了我一番。在没有使用样式时,列表分组很正常,使用了别人写的ListBox列表样式后,发现GroupItem分组区没有内容,是空的,本篇把这一问题的解决过程给大家说一下,做主题时可以注意分组对列表样式的限制了。
1636 0
|
数据库 算法 缓存