动态数据类型转换

简介:

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

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

 

复制代码
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
            {
            }
        }
    }
}

复制代码

 

 

相关文章
|
Kubernetes Java Docker
【K8S系列】Pod重启策略及重启可能原因
【K8S系列】Pod重启策略及重启可能原因
1922 0
|
6月前
|
人工智能 编解码 芯片
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
不会向ai提问,不知道怎么提问的 可以看看
20693 1
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
|
5月前
|
API 开发工具 开发者
HarmonyOS NEXT实战:拨打电话
本课程介绍如何在HarmonyOS SDK中使用Telephony Kit实现拨打电话功能。通过CallPhoneDemoPage示例,讲解如何输入电话号码并调用makeCall接口拨号,涉及call模块的使用及设备通话能力检测。
7860 0
|
JavaScript Java 测试技术
基于微信小程序的高校党费收缴系统的设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的高校党费收缴系统的设计与实现(源码+lw+部署文档+讲解等)
205 0
|
编解码 JavaScript
【项目经验】:vue的PC端项目中通过vw做页面自适应,改变屏幕分辨率后页面混乱
vue的PC端项目中通过vw做页面自适应,改变屏幕分辨率后页面混乱如何处理
465 1
|
人工智能 测试技术 Python
Python实现sqlite3增删改查的封装
Python实现sqlite3增删改查的封装
|
弹性计算 数据可视化 Java
飞天加速计划·ECS使用体验
阿里云Ecs云服务器使用下来发现其类似于一台放在云端的可以自主选择配置的空白电脑主机,通过阿里云的高校学生的优惠计划,我免费体验了阿里云的Ecs云服务器,让我更加深入的了解了云服务器这个概念,体验到的它的便捷性和功能性。更是由于这台Ecs服务器中使用的是Linux系统,也使我巩固复习了很多Linux操作,这些都使我受益颇深。所以非常感谢阿里云给我这次机会,同时我也会在开发的方向上努力前进,也相信会越来月了解云服务器的使用。
飞天加速计划·ECS使用体验
|
存储 SQL Java
springcloud整合seata实现分布式事务
springcloud整合seata实现分布式事务
|
运维 监控 安全
面向失败的设计-概述
一个优秀的架构师通常都是一个悲观主义者,除了设计好能够支撑业务持续发展的优雅架构,另一个容易被忽略的重要能力在于充分考虑失败场景。
3603 0