Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //DataTableExtension.cs
- namespace System
- {
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Reflection;
- public static class DataTableExtension
- {
- /// <summary>
- /// DataTable'ı Generic List'e çevirme...
- /// </summary>
- /// <typeparam name="T">Generic Sınıfınız!</typeparam>
- /// <param name="dt">Datatable nesnesi.</param>
- /// <returns></returns>
- public static List<T> ToGenericList<T>(this DataTable dt)
- {
- //Generic List oluşturuluyor.
- var list = new List<T>();
- //DataTable içerisindeki rowlar alınıyor.
- foreach (DataRow dr in dt.Rows)
- {
- //T(Sizin gönderdiğiniz generic class bellekte oluşturuluyor
- var tReferans = Activator.CreateInstance<T>();
- //T generic sınıfının propertiesleri alınıyor.
- var tlistProperties = tReferans.GetType().GetProperties();
- //propertiesler döngüye sokuluyor
- foreach (PropertyInfo pi in tlistProperties)
- {
- try
- {
- //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.
- pi.SetValue(tReferans, dr[pi.Name], null);
- }
- catch
- {
- //hata olursa es geç. Hata sebebi de tip dönüşümü yada öyle bir properties yoktur demektir.
- // tip dönüşümü: integer değişkene string değişken eklemek gibi runtime hatası.
- }
- }
- //oluşturulan referans liste eklendi.
- list.Add(tReferans);
- }
- //datatable oldu bir generic list.
- return list;
- }
- /// <summary>
- /// Generic Listi datatable a çevirir.
- /// </summary>
- /// <param name="list">Generic Listiniz!</param>
- /// <returns></returns>
- public static DataTable ToDatatable<T>(this IList<T> list)
- {
- //Boş bir datatable açalım.
- var dataTable = new DataTable();
- //list sayısı 0 dan büyükse işleme al.
- if (list.Count > 0)
- {
- //generic listin sınıfının propertieslerini al.
- var properties = list[0].GetType().GetProperties();
- //propertiesleri döngüyle datacolumn olarak datatable a ekle.
- foreach (PropertyInfo pi in properties)
- {
- //datatable a column ekleniyor.
- dataTable.Columns.Add(new DataColumn(pi.Name, pi.PropertyType));
- }
- //nesnenin verilerini datatable a row olarak ekle.
- foreach (object nesne in list)
- {
- //yeni row oluştur.
- DataRow dr = dataTable.NewRow();
- //degerleri oku
- foreach (PropertyInfo pi in properties)
- {
- try
- {
- var deger = pi.GetValue(nesne, null);
- dr[pi.Name] = deger;
- }
- catch
- {
- //hata olursa engelle.
- }
- }
- //datatable a rowları yükle.
- dataTable.Rows.Add(dr);
- }
- }
- //datatable ı geri dön.
- return dataTable;
- }
- /// <summary>
- /// Array sınıfını datatable a çevirir.
- /// </summary>
- /// <param name="list">Generic Listiniz!</param>
- /// <returns></returns>
- public static DataTable ArrayToDatatable<T>(this Array list)
- {
- //Boş bir datatable açalım.
- var dataTable = new DataTable();
- //list sayısı 0 dan büyükse işleme al.
- if (list.Length > 0)
- {
- //array içindeki sınıfın propertieslerini al.
- var properties = list.GetValue(0).GetType().GetProperties();
- //propertiesleri döngüyle datacolumn olarak datatable a ekle.
- foreach (PropertyInfo pi in properties)
- {
- //datatable a column ekleniyor.
- dataTable.Columns.Add(new DataColumn(pi.Name, pi.PropertyType));
- }
- //nesnenin verilerini datatable a row olarak ekle.
- foreach (object nesne in list)
- {
- //yeni row oluştur.
- DataRow dr = dataTable.NewRow();
- //degerleri oku
- foreach (PropertyInfo pi in properties)
- {
- try
- {
- var deger = pi.GetValue(nesne, null);
- dr[pi.Name] = deger;
- }
- catch
- {
- //hata olursa engelle.
- }
- }
- //datatable a rowları yükle.
- dataTable.Rows.Add(dr);
- }
- }
- //datatable ı geri dön.
- return dataTable;
- }
- }
- }
- //DenemeClass.cs
- public class DenemeClass
- {
- public string Adi { get; set; }
- public string Soyadi { get; set; }
- public string DogumYeri { get; set; }
- public int Yasi { get; set; }
- }
- //Test Form...
- private void Form1_Load(object sender, EventArgs e)
- {
- //list
- var list = new List<DenemeClass>();
- //dizi
- DenemeClass[] d = new DenemeClass[20];
- //örnek veri dolduruluyor.
- for (int i = 0; i < 20; i++)
- {
- list.Add(new DenemeClass
- {
- Adi = string.Format("Adı {0}", i),
- Soyadi = string.Format("Adı {0}", i),
- DogumYeri = string.Format("Adı {0}", i),
- Yasi = i + 20
- });
- d[i] = new DenemeClass
- {
- Adi = string.Format("Adı {0}", i),
- Soyadi = string.Format("Adı {0}", i),
- DogumYeri = string.Format("Adı {0}", i),
- Yasi = i + 20
- };
- }
- //list datatable a çevriliyor.
- DataTable dataTable = list.ToDatatable<DenemeClass>();
- //datatable generic liste çevriliyor.
- List<DenemeClass> liste = dataTable.ToGenericList<DenemeClass>();
- //arrayı datatable a çevirelim:
- DataTable arrayDT = d.ArrayToDatatable<DenemeClass>();
- //debug ile brekpoint atarak değişkenleri izleyebilirsin.
- }
Advertisement
Add Comment
Please, Sign In to add comment