asp.net DropDownList自定义控件,让你的分类更清晰自定义控件,让你的分类更清晰
记得上次做论坛,一个功能就是合并2个子板块的主题,用级联的2个DropDownList也是可以完成,那样我们要
合并的时候总共就有4个DropDownList控件,觉得界面友好
看到Discuz是2个下拉列表进行合并的,网上找了一些资料,然后写了这个小源码,在这里和大家分享一下!
运行效果图,如下所示(深黑的地方选不中,因为那是上一级的分类):
项目结构图如下所示:
Controls类库SmartDropDownList.cs代码如下所示:
SmartDropDownList.cs
复制代码 代码如下:
using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Web.UI.WebControls;
6 using System.Web.UI;
7 using System.ComponentModel;
8 using System.Web;
9
namespace mydream.Controls
{
[ToolboxData("<{0}:SmartDropDownList runat=server></{0}:SmartDropDownList>")]
public class SmartDropDownList : DropDownList
{
/// <summary>
/// 构造函数
/// </summary>
public SmartDropDownList() { }
/// <summary>
/// 将控件的内容呈现到指定的编写器中
/// </summary>
/// <param name="writer"></param>
protected override void RenderContents(HtmlTextWriter writer)
{
OptionGroupRenderContents(writer);
}
/// <summary>
/// 呈现Option或OptionGroup
/// </summary>
/// <param name="writer">writer</param>
private void OptionGroupRenderContents(HtmlTextWriter writer)
{
// 是否需要呈现OptionGroup的EndTag
bool writerEndTag = false;
foreach (ListItem li in this.Items)
{
// 如果没有optgroup属性则呈现Option
if (li.Value != this.OptionGroupValue)
{
// 呈现Option
RenderListItem(li, writer);
}
// 如果有optgroup属性则呈现OptionGroup
else
{
if (writerEndTag)
// 呈现OptionGroup的EndTag
OptionGroupEndTag(writer);
else
writerEndTag = true;