程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#反射應用,

C#反射應用,

編輯:C#入門知識

C#反射應用,


考慮這個是因為返回的是對象集合,需要把對象集合綁定到datagridview上,綁定datagridview需要數據源,組裝數據的話,用datatable添加列很麻煩,所以用反射來實現,估計可能會有多個地方使用,可能是不同的對象使用,所以定義為泛型

public class DatatableListHelper<T>
    {
        public static DataTable GetDataTableHelper(List<T> items)
        {
            DataTable dt = new DataTable();
            Type t = items[0].GetType();
            PropertyInfo[] pis = t.GetProperties();
            foreach (PropertyInfo pi in pis)
            {
                dt.Columns.Add(pi.Name);
            }

            foreach (T item in items)
            {
                DataRow dr = dt.NewRow();
                foreach (PropertyInfo pi in pis)
                {
                    object obj = pi.GetValue(item, null);
                    switch (pi.PropertyType.Name.ToString().ToLower())
                    {
                        case "datetime" :
                            dr[pi.Name] = Convert.ToDateTime(obj).ToString("yyyy-MM-dd");
                            break;
                        case "int32":
                            dr[pi.Name] = Convert.ToInt32(obj);
                            break;
                        case "double":
                            dr[pi.Name] = Convert.ToDouble(obj);
                            break;
                        default:
                            dr[pi.Name] = obj;
                            break;
                    }
                }
                dt.Rows.Add(dr);
            }
            return dt;
        }
    }

  switch裡類型不是很全,需要添加一些類型

 

反之,如果把datatable轉換成對象應該也可以用反射來做

 

 1 public static List<T> GetObjectListHelper(DataTable dt, T obj)
 2         {
 3             List<T> list = new List<T>();
 4             Type type = obj.GetType();
 5             PropertyInfo[] pis = type.GetProperties();
 6             foreach (DataRow dr in dt.Rows)
 7             {
 8                 object o = Activator.CreateInstance(type);
 9                 foreach (PropertyInfo pi in pis)
10                 {
11                     pi.SetValue(o, dr[pi.Name].ToString(), null);
12                 }
13                 T t = (T)o;
14                 list.Add(t);
15             }
16             return list;
17         }

本來只想傳一個datatable,不想傳T,沒想到好方法,有什麼好建議,請指導

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved