【项目分析】通用的枚举类型的下拉列表绑定(3)

发现项目中很多采用了硬编码的方式,去绑定下拉框数据,用法相当地挫。之前没有去写个程序梳理下,于是,稍微实现了下通用的绑定方式。

有这样一个学科枚举类型:

代码
///   <summary>  
///  学科 
///   </summary>  
public   enum  Subject 

     None 
=   0
     [Description(
" 语文 " )] 
     Chinese 
=   1

     [Description(
" 数学 " )] 
     Mathematics 
=   2

     [Description(
" 英语 " )] 
     English 
=   3

     [Description(
" 政治 " )] 
     Politics 
=   4

     [Description(
" 物理 " )] 
     Physics 
=   5

     [Description(
" 化学 " )] 
     Chemistry 
=   6

     [Description(
" 历史 " )] 
     History 
=   7

     [Description(
" 地理 " )] 
     Geography 
=   8

     [Description(
" 生物 " )] 
     Biology 
=   9  
}

这里使用了一个Description特性,目的是为了在一个DropDownList列表中绑定文本数据。

这里使用了一个扩展方法,目的为了返回一个Value和Text的数据列表,上方法:

 

代码
     ///   <summary>
    
///  枚举辅助类
    
///   </summary>
     public   static   class  EnumHelper
    {
        
///   <summary>  
        
///  获得枚举类型数据项(不包括空项)
        
///   </summary>  
        
///   <param name="enumType"> 枚举类型 </param>  
        
///   <returns></returns>  
         public   static  IList < object >  GetItems( this  Type enumType)
        {
            
if  ( ! enumType.IsEnum)
                
throw   new  InvalidOperationException();

            IList
< object >  list  =   new  List < object > ();

            
//  获取Description特性 
            Type typeDescription  =   typeof (DescriptionAttribute);
            
//  获取枚举字段
            FieldInfo[] fields  =  enumType.GetFields();
            
foreach  (FieldInfo field  in  fields)
            {
                
if  ( ! field.FieldType.IsEnum)
                    
continue ;

                 
//  获取枚举值
                 int  value  =  ( int )enumType.InvokeMember(field.Name, BindingFlags.GetField,  null null null );

                
//  不包括空项
                 if  (value  >   0 )
                {
                    
string  text  =   string .Empty;
                    
object [] array  =  field.GetCustomAttributes(typeDescription,  false );

                    
if  (array.Length  >   0 ) text  =  ((DescriptionAttribute)array[ 0 ]).Description;
                    
else  text  =  field.Name;  // 没有描述,直接取值

                    
// 添加到列表
                    list.Add( new  { Value  =  value, Text  =  text });
                }
            }
            
return  list;
        }
    }

 

这里采用特性反射的方式得到了对应的Value和Text,最后返回了一个new { Value = …, Text = … }的匿名类的列表。

那么页面上实现就相当简单了:

代码
< asp:DropDownList ID = " ddlSubject "  runat = " server " ></ asp:DropDownList >

ddlSubject.DataSource 
=   typeof (Subject).GetItems(); 
ddlSubject.DataTextField 
=   " Text "
ddlSubject.DataValueField 
=   " Value "
ddlSubject.DataBind();

 

最后得到一个绑定学科的下拉列表:

1

这,非常简单:)

 

PS:全国资源最全最有效的高中教育学习网站:http://edu.591up.com/

你可能感兴趣的:(下拉列表)