国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#反射應用

2019-11-17 02:25:07
字體:
來源:轉載
供稿:網友

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轉換成對象應該也可以用反射來做

public static List<T> GetObjectListHelper(DataTable dt, T obj)        {            List<T> list = new List<T>();            Type type = obj.GetType();            PropertyInfo[] pis = type.GetProperties();            foreach (DataRow dr in dt.Rows)            {                object o = Activator.CreateInstance(type);                foreach (PropertyInfo pi in pis)                {                    //pi.SetValue(o, dr[pi.Name].ToString(), null);                    switch (pi.PropertyType.Name.ToString().ToLower())                    {                        case "datetime":                            pi.SetValue(o, Convert.ToDateTime(dr[pi.Name].ToString()), null);                            break;                        case "int32":                            pi.SetValue(o, Convert.ToInt32(dr[pi.Name].ToString()), null);                            break;                        case "double":                            pi.SetValue(o, Convert.ToDouble(dr[pi.Name].ToString()), null);                            break;                        default:                            pi.SetValue(o, dr[pi.Name].ToString(), null);                            break;                    }                }                T t = (T)o;                list.Add(t);            }            return list;        }

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永济市| 福贡县| 饶阳县| 都昌县| 承德县| 商水县| 芦山县| 丰宁| 邓州市| 宁德市| 深州市| 温州市| 台湾省| 元朗区| 油尖旺区| 崇义县| 新建县| 昭平县| 民丰县| 汉沽区| 巨鹿县| 安福县| 木兰县| 金堂县| 边坝县| 铜梁县| 垫江县| 北宁市| 灵石县| 伊川县| 奇台县| 丹巴县| 天镇县| 商河县| 武城县| 嘉鱼县| 景德镇市| 皮山县| 桂阳县| 龙门县| 北安市|