手记

动态数据类型转换

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

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

 

代码

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

 

 

0人推荐
随时随地看视频
慕课网APP