drummery

博客园 首页 新随笔 联系 订阅 管理
      [下载源代码]

      在使用ASP.NET开发Web应用程序时经常会需要用户从枚举类型中选择某一成员,使用DropDownList来处理这种场景比较合适,但同时DropDownList本身也存在一些限制,使其不能对枚举类型提供良好的支持。例如使用Enum.GetNames()方法可以将枚举成员的Text作为数据源绑定到DropDownList,但不能将成员的Value也实现绑定。因此考虑设计支持枚举类型数据源的控件——EnumDropDown。

      我们主要通过重写DropDownList类型的DataSource属性和DataBind()方法实现上述功能。

      重写DataSource属性

      将DataSource属性重写为Type类型,以便控件可以获取希望绑定的枚举类型。
private Type m_enumType;

public new Type DataSource
{
    
get
    
{
        
return m_enumType;
    }

    
set
    
{
        m_enumType 
= value;
    }

}


      获取数据源

      考虑到要同时绑定枚举成员的Text和Value,以及枚举成员与整型之间方便的进行转换,使用Dictionary<string, int>类型包装从给定的枚举类型中读取的数据作为DropDownList的数据源。
private Dictionary<stringint> GetDataSource()
{
    Dictionary
<stringint> retval = new Dictionary<stringint>();
    
string[] enumNames = Enum.GetNames(m_enumType);
    
for (int i = 0; i < enumNames.Length; i++)
    
{
        retval.Add(enumNames[i], (
int)Enum.Parse(m_enumType, enumNames[i]));
    }

    
return retval;
}

      重写DataBind方法

public override void DataBind()
{
    
base.DataSource = GetDataSource();
    DataValueField 
= "Value";
    DataTextField 
= "Key";
    
base.DataBind();
}
  
      参考文章:http://aspalliance.com/1514_Extending_the_DropDownList_to_Support_Enums 
posted on 2008-02-19 15:25  Drummer  阅读(1606)  评论(6编辑  收藏  举报