วันศุกร์ที่ 2 พฤศจิกายน พ.ศ. 2555

การแปลงข้อมูลจาก DataTable เป็น List<>


 public List<T> ConvertDataTableToEntity<T>(DataTable dt)
        {
            List<T> DataReturn = new List<T>();
            for (int i = 0; i <= dt.Rows.Count - 1; i++)
            {
                T item = (T)Activator.CreateInstance(typeof(T));
                for (int k = 0; k <= dt.Columns.Count - 1; k++)
                {
                    PropertyInfo[] pf = item.GetType().GetProperties();
                    for (int y = 0; y <= pf.Length - 1; y++)
                    {
                        if (pf[y].Name.ToLower() == dt.Columns[k].ColumnName.ToLower())
                        {
                            pf[y].SetValue(item, Convert.ChangeType(dt.Rows[i][k], Type.GetType((dt.Columns[k].DataType.ToString()))), null);
                        }
                    }
                }
                DataReturn.Add((T)item);
            }
            return DataReturn;
        }

วิธีเรียกใช้งาน
ตัวอย่าง
 ต้องมี Class ที่มี Property ที่เหมือนกับ DataTable ก่อน ในตัวอย่างนี้สร้าง Class A ขึ้นมา
public class A
    {
        public string A1 { get; set; }
        public int A2 { get; set; }
        public string A3 { get; set; }
        public string A4 { get; set; }
    }

กำหนดค่าใน DataTable โดยจะต้องมีชื่อคอลั่มน์ที่กรงกับชื่อ Property ของ Class ที่เราจะแปลง
 DataTable dt1 = new DataTable();
            dt1.Columns.Add("A1", Type.GetType("System.String"));
            dt1.Columns.Add("A2", Type.GetType("System.Int32"));
            dt1.Columns.Add("A3", Type.GetType("System.String"));
            dt1.Columns.Add("A4", Type.GetType("System.String"));
            DataRow dr = dt1.NewRow();
            dr["A1"] = "T1";
            dr["A2"] = 20;
            dr["A3"] = "T3";
            dr["A4"] = "T4";
            dt1.Rows.Add(dr);


สร้างตัวแปร List<A> เพื่อมารับข้อมูลที่มีการ Concevert
 List<A> data = new List<A>();
data = this.ConvertDataTableToEntity<A>(dt1);

ไม่มีความคิดเห็น:

แสดงความคิดเห็น