动态数据类型转换

2年前 (2022) 程序员胖胖胖虎阿
321 0 0

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

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

 

动态数据类型转换代码

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

 

 

版权声明:程序员胖胖胖虎阿 发表于 2022年9月23日 上午11:08。
转载请注明:动态数据类型转换 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...