62,046
社区成员
发帖
与我相关
我的任务
分享
public void SetValue(object obj,object value)
{
Type type;
if (this.property != null)
{
type = this.property.PropertyType;
}
else
{
type = this.field.FieldType;
}
if (Convert.IsDBNull(value))
{
if (this.columnAttribute.DefaultValue != null)
{
value = this.columnAttribute.DefaultValue;
}
else if (!type.IsValueType)
{
value = null;
}
else
{
return;
}
}
if (this.property != null)
{
try
{
this.property.SetValue(obj, IsValidata(value), null);
}
catch
{
this.property.SetValue(obj, value, null);
}
}
else
{
this.field.SetValue(obj, value);
}
}
//Fields
internal const BindingFlags ColumnBindingFlags = (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
//Methods
public static void TransEntityPropertyToWebFormData(object entity, object form)
{
if ((form != null) && (entity != null))
{
Type formType = form.GetType();
Type entityType = entity.GetType();
IFieldMemberInfo[] columns = FieldMemberInfo.GetFieldMembers(formType, BindingFlags.GetProperty | BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, true);
for (int i = 0; i < columns.Length; i++)
{
if (columns[i].CanWrite)
{
object value = null;
if (entity is DataRow)
{
DataRow dr = (DataRow) entity;
value = dr[columns[i].Name];
}
else
{
PropertyInfo property = entityType.GetProperty(columns[i].Name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
if ((property != null) && property.CanRead)
{
value = property.GetValue(entity, null);
}
}
if (value != null)
{
object fieldObject = columns[i].GetValue(form);
string stringValue = (string) Convert.ChangeType(value, typeof(string));
if (fieldObject is TextBox)
{
(fieldObject as TextBox).Text = stringValue;
}
else if (fieldObject is DropDownList)
{
DropDownList ddl = fieldObject as DropDownList;
ddl.ClearSelection();
WebHelper.SafelySetDropDownListValue(ddl, stringValue);
}
else if (fieldObject is Label)
{
(fieldObject as Label).Text = stringValue;
}
else if (fieldObject is HyperLink)
{
(fieldObject as HyperLink).Text = stringValue;
}
}
}
}
}
}
public static void TransObject(object[] objs, DataTable dt)
{
TransObject(objs, dt, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
}
public static void TransObject(DataTable dt, object[] objs)
{
TransObject(dt, objs, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
}
public static void TransObject(DataTable dt, object obj)
{
TransObject(dt, new object[] { obj });
}
public static void TransObject(object obj, DataTable dt)
{
TransObject(new object[] { obj }, dt);
}
public static void TransObject(DataRow[] drs, object[] objs, BindingFlags columnBindingFlags)
{
if ((((objs != null) && (objs.Length != 0)) && (drs != null)) && (drs.Length != 0))
{
int num = drs.Length;
if (objs.Length < num)
{
num = objs.Length;
}
Type type = objs[0].GetType();
IFieldMemberInfo[] columns = FieldMemberInfo.GetFieldMembers(type, columnBindingFlags);
for (int i = 0; i < num; i++)
{
if (objs[i].GetType() == type)
{
DataRow dr = drs[i];
for (int k = 0; k < columns.Length; k++)
{
if (columns[k].CanWrite)
{
columns[k].SetValue(objs[i], dr[columns[k].Name]);
}
}
}
}
}
}
public static void TransObject(DataTable dt, object[] objs, BindingFlags columnBindingFlags)
{
if ((((objs != null) && (objs.Length != 0)) && (dt != null)) && (dt.Rows.Count != 0))
{
TransObject(dt.Select(), objs, columnBindingFlags);
}
}
public static Array TransObject(DataTable dt, Type type, params object[] parameters)
{
return TransObject(dt, type, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, parameters);
}
public static void TransObject(object[] objs, DataTable dt, BindingFlags columnBindingFlags)
{
if (((objs != null) && (objs.Length != 0)) && (dt != null))
{
Type type = objs[0].GetType();
IFieldMemberInfo[] columns = FieldMemberInfo.GetFieldMembers(type, columnBindingFlags);
for (int i = 0; i < objs.Length; i++)
{
if (objs[i].GetType() == type)
{
DataRow dr = dt.NewRow();
for (int k = 0; k < columns.Length; k++)
{
if (columns[k].CanRead)
{
dr[columns[k].Name] = columns[k].GetValue(objs[i]);
}
}
dt.Rows.Add(dr);
}
}
}
}
public static Array TransObject(DataRow[] drs, Type type, BindingFlags columnBindingFlags, params object[] parameters)
{
if ((drs == null) || (drs.Length == 0))
{
return null;
}
int num = drs.Length;
Array objs = Array.CreateInstance(type, num);
for (int i = 0; i < num; i++)
{
objs.SetValue(TypeHelper.CreateObject(type, null, true, parameters), i);
}
TransObject(drs, (object[]) objs, columnBindingFlags);
return objs;
}
public static Array TransObject(DataTable dt, Type type, BindingFlags columnBindingFlags, params object[] parameters)
{
if ((dt == null) || (dt.Rows.Count == 0))
{
return null;
}
int num = dt.Rows.Count;
Array objs = Array.CreateInstance(type, num);
for (int i = 0; i < num; i++)
{
objs.SetValue(TypeHelper.CreateObject(type, null, true, parameters), i);
}
TransObject(dt, (object[]) objs, columnBindingFlags);
return objs;
}
贴上部分代码 因为这个类库完善了好久,也用了好久 如果要改成泛型的话确实不知道从哪部分下手 望高手給个链接或者简单点的实现案例