动态数据类型转换

这是我的工具包里的一部分代码

部分方法已被我移值到我的框架去,做为实体的基类的默认方法。

 

05233617_flCv.gif 代码
using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Web.UI;
using  System.Reflection;
using  System.Web.UI.WebControls;

namespace  Toolkit
{
    
///   <summary>
    
///  表的字段设置/获到值操作类
    
///   </summary>
     public   class  TableValue
    {
        Object entity;
// 实体对象
        Type typeInfo; // 实体对象类型
         ///   <summary>
        
///  表的字段设置/获到值操作类构造函数
        
///   </summary>
        
///   <param name="entityInstance"> 传进表的实体 </param>
         public  TableValue(Object entityInstance)
        {
            entity 
=  entityInstance;
            typeInfo 
=  entity.GetType();
        }
        
///   <summary>
        
///  将实体的值设置到控件中
        
///   </summary>
        
///   <param name="ct"></param>
         public   void  SetTo(Control ct)
        {
            
string  propName  =  ct.ID.Substring( 3 );
            
object  value  =  GetPropertyValue(propName);
            
switch  (ct.GetType().Name)
            {
                
case   " TextBox " :
                    ((TextBox)ct).Text 
=  Convert.ToString(value);
                    
break ;
                
case   " Literal " :
                    ((Literal)ct).Text 
=  Convert.ToString(value);
                    
break ;
                
case   " Label " :
                    ((Label)ct).Text 
=  Convert.ToString(value);
                    
break ;
                
case   " DropDownList " :
                    ((DropDownList)ct).SelectedValue 
=  Convert.ToString(value);
                    
break ;
                
case   " CheckBox " :
                    
bool  tempValue;
                    
if  (Convert.ToString(value)  ==   " 1 " )
                    {
                        tempValue 
=   true ;
                    }
                    
else
                    {
                        
bool .TryParse(Convert.ToString(value),  out  tempValue);
                    }
                    ((CheckBox)ct).Checked 
=  tempValue;
                    
break ;
            }
           
        }
        
///   <summary>
        
///  将控件的值设置到实体中[默认从控件中自动获取值]
        
///   </summary>
        
///   <param name="ct"> 控件 </param>
        
///   <param name="value"> 自定义值,若此值存在,则不从控件中获取值 </param>
         public   void  GetFrom(Control ct,  object  value)
        {
            
string  propName  =  ct.ID.Substring( 3 );
            
if  (value  ==   null )
            {
                
switch  (ct.GetType().Name)
                {
                    
case   " TextBox " :
                        value 
=  ((TextBox)ct).Text.Trim();
                        
break ;
                    
case   " Literal " :
                        value
= ((Literal)ct).Text;
                        
break ;
                    
case   " Label " :
                        value 
=  ((Label)ct).Text;
                        
break ;
                    
case   " DropDownList " :
                        value 
=  ((DropDownList)ct).SelectedValue;
                        
break ;
                    
case   " CheckBox " :
                        value 
=  ((CheckBox)ct).Checked;
                        
break ;
                }
            }
            SetPropertyValue(propName, value);
        }
        
///   <summary>
        
///  将控件的值设置到实体中
        
///   </summary>
        
///   <param name="ct"> 控件 </param>
         public   void  GetFrom(Control ct)
        {
            GetFrom(ct, 
null );
        }
        
///   <summary>
        
///  获取对象指定属性的值
        
///   </summary>
        
///   <param name="obj"> 对象 </param>
        
///   <param name="propName"> 属性名称 </param>
        
///   <returns></returns>
         private    object  GetPropertyValue( string  propName)
        {
            PropertyInfo prop 
=  typeInfo.GetProperty(propName);
            
return  prop.GetValue(entity,  null );
        }
        
///   <summary>
        
///  设置对象指定属性的值
        
///   </summary>
        
///   <param name="obj"> 对象 </param>
        
///   <param name="propName"> 属性名称 </param>
        
///   <returns></returns>
         private   void  SetPropertyValue( string  propName,  object  value)
        {
            PropertyInfo prop 
=  typeInfo.GetProperty(propName);
            Type valueType 
=   null ;
            
if  (prop.PropertyType.Name.Contains( " Nullable " ))
            {
                valueType 
=  Type.GetType(prop.PropertyType.FullName.Substring( 19 , prop.PropertyType.FullName.IndexOf( " , " -   19 ));
            }
            
else
            {
                valueType 
=  prop.PropertyType;
            }
            
try
            {
                
if  (valueType.Name  !=   " DateTime "   ||  Convert.ToString(value)  !=   "" )
                {
                    value 
=  System.ComponentModel.TypeDescriptor.GetConverter(valueType).ConvertFrom(Convert.ToString(value));
                    prop.SetValue(entity, value, 
null );
                }
            }
            
catch
            {
            }
        }
    }
}

 

 

转载于:https://my.oschina.net/secyaher/blog/274268

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值