ConvertUtil

using System;
using System.Data;
using System.Collections;
using System.Reflection;

namespace SysUtility.Utils
{
 /// <summary>
 /// ConvertUtil 的摘要说明。
 /// </summary>
 public class ConvertUtil
 {
  #region Constructors
  private static IController adminHelper;
  /// <summary>
  /// 构造函数,初始化ConvertUtil类的新实例。
  /// </summary>
  static ConvertUtil()
  {
   adminHelper = new RMController();
  }
  #endregion

  /// <summary>
  /// 把目标的所有属性转换成Hashtable的形式
  /// </summary>
  /// <param name="target">目标对象</param>
  /// <returns>属性的Hashtable形式</returns>
  /// <remarks>
  /// 使用反射实现,需要正确使用
  /// </remarks>
  public static Hashtable FillCollection(object target)
  {
   Hashtable result = new Hashtable();
   Type objType = target.GetType();
   PropertyInfo[] objProperties = objType.GetProperties();
   foreach ( PropertyInfo objPropertyInfo in objProperties )
   {
    result.Add(objPropertyInfo.Name, objPropertyInfo.GetValue(target, null));
   }
   
   return result;
  }

  /// <summary>
  /// 把表的第一行数据导入到实体对象中
  /// </summary>
  /// <param name="objDataTable">表</param>
  /// <param name="objResult">实体对象</param>
  public static bool RowToEntity(DataTable objDataTable, EntityBase objResult)
  {
   if ( objDataTable != null && objDataTable.Rows.Count == 1 )
   {
    Type objType = objResult.GetType();
    PropertyInfo[] objProperties = objType.GetProperties();
    for ( int i = 0; i < objDataTable.Columns.Count; i++ )
    {
     foreach ( PropertyInfo objPropertyInfo in objProperties )
     {
      if ( objPropertyInfo.Name.Equals(objDataTable.Columns[i].ColumnName) )
      {
       if ( objPropertyInfo.CanWrite )
       {
        try
        {
         objPropertyInfo.SetValue(objResult, Convert.ChangeType(objDataTable.Rows[0][objPropertyInfo.Name], objPropertyInfo.PropertyType), null);
        }
        catch{}
       }
      }
     }
    }
    return true;
   }
   return false;
  }

  /// <summary>
  /// 把表的数据导入到类型为type类型的实体对象列表中
  /// </summary>
  /// <param name="type"></param>
  /// <param name="objDataTable"></param>
  /// <param name="objResult"></param>
  public static bool RowsToEntity(DataTable objDataTable, ref EntityBase[] objResults)
  {
   if ( objDataTable != null && objDataTable.Rows.Count >= 1 && objDataTable.Rows.Count == objResults.Length )
   {
    Type objType = objResults[0].GetType();
    PropertyInfo[] objProperties = objType.GetProperties();
    for ( int rowcnt = 0 ; rowcnt < objDataTable.Rows.Count; rowcnt++ )
    {
     for ( int i = 0; i < objDataTable.Columns.Count; i++ )
     {
      foreach ( PropertyInfo objPropertyInfo in objProperties )
      {
       if ( objPropertyInfo.Name.Equals(objDataTable.Columns[i].ColumnName) )
       {
        if ( objPropertyInfo.CanWrite )
        {
         try
         {
          objPropertyInfo.SetValue(objResults[rowcnt], Convert.ChangeType(objDataTable.Rows[rowcnt][objPropertyInfo.Name], objPropertyInfo.PropertyType), null);
         }
         catch{}
        }
       }
      }
     }
    }
    return true;
   }
   return false;
  }
  /// <summary>
  /// 获取一个信息类的全部内容
  /// </summary>
  /// <param name="entity"></param>
  /// <returns>是否填充</returns>
  public static bool FillEntity(EntityBase entity)
  {
   return ConvertUtil.RowToEntity(adminHelper.Select(entity), entity);
  }
  /// <summary>
  /// 转换字符串为DateTime类型
  /// </summary>
  public static DateTime ToDateTime(string text)
  {
   try
   {
    return DateTime.Parse(text.Trim());
   }
   catch
   {
    return DateTime.Parse("1900-1-1");
   }
  }
  /// <summary>
  /// 转换字符串为DateTime类型,text为时分秒的格式
  /// </summary>
  public static DateTime ToTime(string text)
  {
   try
   {
    return DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd ")+text.Trim());
   }
   catch
   {
    return DateTime.Parse("1900-01-01 00:00:00");
   }
  }
 }
}

posted on 2005-09-18 23:28  刘余学  阅读(228)  评论(0)    收藏  举报

导航