这是我的工具包里的一部分代码
部分方法已被我移值到我的框架去,做为实体的基类的默认方法。
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
{
}
}
}
}