动态数据类型转换

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

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

 

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

 

时间: 2024-11-05 06:07:22

动态数据类型转换的相关文章

js笔记——js数据类型转换

JavaScript是一种动态类型语言,变量是没有类型的,可以随时赋予任意值.但是,数据本身和各种运算是有类型的,因此运算时变量需要转换类型.大多数情况下,这种数据类型转换是自动的,但是有时也需要手动强制转换. 强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. Number函数:强制转换成数值 使用Number函数,可以将任意类型的值转化成数字. (1)原始类型值的转换规则 数值:转换后还是原来的值. 字符串:

Swift数据类型及数据类型转换

整型      Swift 提供 8.16.32.64 位形式的有符号及无符号整数.这些整数类型遵循 C 语言的命名规 约,如 8 位无符号整数的类型为 UInt8,32 位 有符号整数的类型为 Int32.与 Swift 中的所有 类型一样,这些整数类型的名称以大写字母开 头.   Swift 还提供了一个整数类型Int:      在 32 位平台,Int 与 Int32 宽度一致.      在 64 位平台,Int 与 Int64 宽度一致.              Swif

emit-dapper.net IDataReader数据类型转换报错:操作可能会破坏运行时稳定性

问题描述 dapper.net IDataReader数据类型转换报错:操作可能会破坏运行时稳定性 object item3 = ((IDataRecord)this)[num8]; if (item3 is DBNull) { } else { string str1 = item3 as string; str = str1; if (str1 == null) { pluginType = (PluginType)Convert.ToByte(item3); } else { plugin

php 数据类型转换

本篇文章主要分享一下PHP数据类型转换的知识. PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: (int).(integer):转换成整形 (float).(double).(real):转换成浮点型 (string):转换成字符串 (bool).(boolean):转换成布尔类型 (array):转换成数组 (object):转换成对象 PHP数据类型有三种转换方式: (1)在要转换的变量之前加上用括号括起来的目标类型,例如: (int)  (bool)  (float)  (

PHP数据类型转换

PHP数据类型转换   PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:   •(int).(integer):转换成整形  •(float).(double).(real):转换成浮点型  •(string):转换成字符串  •(bool).(boolean):转换成布尔类型  •(array):转换成数组  •(object):转换成对象  PHP数据类型有三种转换方式:   •在要转换的变量之前加上用括号括起来的目标类型  •使用3个具体类型的转换函数,intval().fl

如何实现100%的动态数据管道(二)

动态|数据 主要思路解决了,下面开始写详细设计(以Sybase ASE数据库为例,其他各位扩展):             1.建立中间层表vdt_columns,这个表的属性用于构建管道中的列资料.             执行类似的代码生成:             ls_sql = "create table vdt_columns ("            ls_sql +="uid              int             null    ,&qu

如何实现100%的动态数据管道(三)

动态|数据 下面看看,如何根据中间层的数据,构建管道语法: 1.首先建立一个数据窗口对象:d_vdtcolumns SQL语法是:  SELECT vdt_columns.utid,            vdt_columns.uid,            vdt_columns.upkey,            vdt_columns.udmid,            vdt_columns.udmname,            vdt_columns.unulls,        

用asp+javascript实现动态数据联动,不刷新

javascript|动态|数据|刷新 /////////////by xxrl(孔曰成仁,孟曰取E) /////////////Chinese:蒋健华 /////////////email:jjh_115@eyou.com 联动,联动,联动....困扰了好多网友的神经,在CSDN-ASP板块中,总是看到网友们大呼救命,救什么?联动!为什么联动这样受到关注,其实用性无可非议,用户也能认可,可是如果数据是大量并相互关联的,那问题就来了,怎么识别并显示是一个很苦恼的问题.那究竟有没有一个很好的解决办

简要JAVA数据类型转换

数据|数据类型|转换 1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([String],[int radix]); 2). int i = Integer.valueOf(my_str).intValue(); 注: 字串转成 Double, Float, Long 的方法大同小异. 2 如何将整数 int 转换成字串 String ? A. 有叁种