• 动态数据类型转换


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

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

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

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    缓存
    java内存模型—先行发生原则
    Java中的阻塞队列
    java的Map
    事务传播性、隔离性与MVCC
    final修饰符
    领域驱动设计和实践
    对象转换利器之Dozer
    SharePoint Iframe 报错“此内容不能显示在一个框架中”
    使用SVG symbols建立图标系统
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1500639.html
Copyright © 2020-2023  润新知