pcmaker

List - Array To DataTable.

Nov 10th, 2012
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.24 KB | None | 0 0
  1. //DataTableExtension.cs
  2. namespace System
  3. {
  4.     using System;
  5.     using System.Collections.Generic;
  6.     using System.Data;
  7.     using System.Linq;
  8.     using System.Reflection;
  9.  
  10.     public static class DataTableExtension
  11.     {
  12.         /// <summary>
  13.         /// DataTable'ı Generic List'e çevirme...
  14.         /// </summary>
  15.         /// <typeparam name="T">Generic Sınıfınız!</typeparam>
  16.         /// <param name="dt">Datatable nesnesi.</param>
  17.         /// <returns></returns>
  18.         public static List<T> ToGenericList<T>(this DataTable dt)
  19.         {
  20.             //Generic List oluşturuluyor.
  21.             var list = new List<T>();
  22.  
  23.             //DataTable içerisindeki rowlar alınıyor.
  24.             foreach (DataRow dr in dt.Rows)
  25.             {
  26.                 //T(Sizin gönderdiğiniz generic class bellekte oluşturuluyor
  27.                 var tReferans = Activator.CreateInstance<T>();
  28.  
  29.                 //T generic sınıfının propertiesleri alınıyor.
  30.                 var tlistProperties = tReferans.GetType().GetProperties();
  31.  
  32.                 //propertiesler döngüye sokuluyor
  33.                 foreach (PropertyInfo pi in tlistProperties)
  34.                 {
  35.                     try
  36.                     {
  37.                         //tReferans sizin generic class, pi.Name properties adı: Class.AdSoyad gibi, dr ise o anki datarow içindeki column'un verisi, null ise indexer ı geç demek.
  38.                         pi.SetValue(tReferans, dr[pi.Name], null);
  39.                     }
  40.                     catch
  41.                     {
  42.                         //hata olursa es geç. Hata sebebi de tip dönüşümü yada öyle bir properties yoktur demektir.
  43.                         // tip dönüşümü: integer değişkene string değişken eklemek gibi runtime hatası.
  44.                     }
  45.                 }
  46.                 //oluşturulan referans liste eklendi.
  47.                 list.Add(tReferans);
  48.             }
  49.  
  50.             //datatable oldu bir generic list.
  51.             return list;
  52.         }
  53.  
  54.  
  55.         /// <summary>
  56.         /// Generic Listi datatable a çevirir.
  57.         /// </summary>
  58.         /// <param name="list">Generic Listiniz!</param>
  59.         /// <returns></returns>
  60.         public static DataTable ToDatatable<T>(this IList<T> list)
  61.         {
  62.             //Boş bir datatable açalım.
  63.             var dataTable = new DataTable();
  64.  
  65.             //list sayısı 0 dan büyükse işleme al.
  66.             if (list.Count > 0)
  67.             {
  68.                 //generic listin sınıfının propertieslerini al.
  69.                 var properties = list[0].GetType().GetProperties();
  70.  
  71.                 //propertiesleri döngüyle datacolumn olarak datatable a ekle.
  72.                 foreach (PropertyInfo pi in properties)
  73.                 {
  74.                     //datatable a column ekleniyor.
  75.                     dataTable.Columns.Add(new DataColumn(pi.Name, pi.PropertyType));
  76.                 }
  77.  
  78.                 //nesnenin verilerini datatable a row olarak ekle.
  79.                 foreach (object nesne in list)
  80.                 {
  81.                     //yeni row oluştur.
  82.                     DataRow dr = dataTable.NewRow();
  83.  
  84.                     //degerleri oku
  85.                     foreach (PropertyInfo pi in properties)
  86.                     {
  87.                         try
  88.                         {
  89.                             var deger = pi.GetValue(nesne, null);
  90.                             dr[pi.Name] = deger;
  91.                         }
  92.                         catch
  93.                         {
  94.                             //hata olursa engelle.
  95.                         }
  96.                     }
  97.  
  98.                     //datatable a rowları yükle.
  99.                     dataTable.Rows.Add(dr);
  100.                 }
  101.             }
  102.  
  103.             //datatable ı geri dön.
  104.             return dataTable;
  105.         }
  106.  
  107.         /// <summary>
  108.         /// Array sınıfını datatable a çevirir.
  109.         /// </summary>
  110.         /// <param name="list">Generic Listiniz!</param>
  111.         /// <returns></returns>
  112.         public static DataTable ArrayToDatatable<T>(this Array list)
  113.         {
  114.             //Boş bir datatable açalım.
  115.             var dataTable = new DataTable();
  116.  
  117.             //list sayısı 0 dan büyükse işleme al.
  118.             if (list.Length > 0)
  119.             {
  120.                 //array içindeki sınıfın propertieslerini al.
  121.                 var properties = list.GetValue(0).GetType().GetProperties();
  122.  
  123.                 //propertiesleri döngüyle datacolumn olarak datatable a ekle.
  124.                 foreach (PropertyInfo pi in properties)
  125.                 {
  126.                     //datatable a column ekleniyor.
  127.                     dataTable.Columns.Add(new DataColumn(pi.Name, pi.PropertyType));
  128.                 }
  129.  
  130.                 //nesnenin verilerini datatable a row olarak ekle.
  131.                 foreach (object nesne in list)
  132.                 {
  133.                     //yeni row oluştur.
  134.                     DataRow dr = dataTable.NewRow();
  135.  
  136.                     //degerleri oku
  137.                     foreach (PropertyInfo pi in properties)
  138.                     {
  139.                         try
  140.                         {
  141.                             var deger = pi.GetValue(nesne, null);
  142.                             dr[pi.Name] = deger;
  143.                         }
  144.                         catch
  145.                         {
  146.                             //hata olursa engelle.
  147.                         }
  148.                     }
  149.  
  150.                     //datatable a rowları yükle.
  151.                     dataTable.Rows.Add(dr);
  152.                 }
  153.             }
  154.  
  155.             //datatable ı geri dön.
  156.             return dataTable;
  157.         }
  158.     }
  159. }
  160.  
  161.  
  162.  
  163.  
  164. //DenemeClass.cs
  165.  
  166. public class DenemeClass
  167.     {
  168.         public string Adi { get; set; }
  169.  
  170.         public string Soyadi { get; set; }
  171.  
  172.         public string DogumYeri { get; set; }
  173.  
  174.         public int Yasi { get; set; }
  175.     }
  176.  
  177.  
  178. //Test Form...
  179.  
  180. private void Form1_Load(object sender, EventArgs e)
  181.         {
  182.             //list
  183.             var list = new List<DenemeClass>();
  184.  
  185.             //dizi
  186.             DenemeClass[] d = new DenemeClass[20];
  187.  
  188.             //örnek veri dolduruluyor.
  189.             for (int i = 0; i < 20; i++)
  190.             {
  191.                 list.Add(new DenemeClass
  192.                 {
  193.                     Adi = string.Format("Adı {0}", i),
  194.                     Soyadi = string.Format("Adı {0}", i),
  195.                     DogumYeri = string.Format("Adı {0}", i),
  196.                     Yasi = i + 20
  197.                 });
  198.  
  199.                 d[i] = new DenemeClass
  200.                 {
  201.                     Adi = string.Format("Adı {0}", i),
  202.                     Soyadi = string.Format("Adı {0}", i),
  203.                     DogumYeri = string.Format("Adı {0}", i),
  204.                     Yasi = i + 20
  205.                 };
  206.             }
  207.  
  208.             //list datatable a çevriliyor.
  209.             DataTable dataTable = list.ToDatatable<DenemeClass>();
  210.  
  211.             //datatable generic liste çevriliyor.
  212.             List<DenemeClass> liste = dataTable.ToGenericList<DenemeClass>();
  213.  
  214.             //arrayı datatable a çevirelim:
  215.             DataTable arrayDT = d.ArrayToDatatable<DenemeClass>();
  216.  
  217.             //debug ile brekpoint atarak değişkenleri izleyebilirsin.
  218.         }
Advertisement
Add Comment
Please, Sign In to add comment