Sem Göksu
Sem Göksu
Yazılım · Yolculuk · Fenerbahçe
Yazılım

Reflection ile Dinamik Tip Oluşturmak

19 Ağustos 2011 1 dk okuma 1786 0
Projelerimden birinde Developer Express kontrollerinden ASPxGridview'i kullanırken RowDataBound eventinin olmadığını farkettim. Biraz araştırdıktan sonra bu evente karşılık olarak HtmlRowPrepared eventini buldum. Bu event RowDataBound ile aynı işi yapsa da çok yetersiz. Örnek olarak e.Row.DataItem property'si ASPxGridView kontrolün de yer almıyor. Benzer işi yapan GetValue metodu var fakat her defasında da datayı okumak için GetValue metodunu çağırmak pek hoşuma gitmedi açıkcası.

Bu sorunu çözmek için bir extension metot yazdım ve her defasında GetValue metodunu çağırmak yerine ilgili nesneyi döndürüyor. Metot generic olduğu için hangi tipte nesne set ederseniz edin size o tipte bir nesne döndürüyor. Her ne kadar Asp.Net kontrolünün yerini tutan bir kontrol olmasa da bu metot sayesinde biraz daha kullanışlı hale gelmiş oldu :)


public static
T RowData<T>(this ASPxGridViewTableRowEventArgs row) whereT : class, new()
{
    
Type originalObject = (newT()).GetType(); // DataSource'a set edilen collection nesnenin tipi
 
   T newObject = Activator.CreateInstance<T>(); // Geri döndüreceğimiz tipi oluşturuyoruz

    
foreach (var property in originalObject.GetProperties()) // Property'lere değerlerini set etmek için tüm propertyler arasında gezinelim
    {
        
if (property.CanWrite) // Property set blogunu içeriyorsa
        {
            property.SetValue(newObject, row.GetValue(property.Name),
null);
        }
    }
    
return(T)newObject; // Oluşturulan tip doldurulduktan sonra geri döndürülür...
}

İşte bu kadar :)

Paylaş:

Yorumlar (0)

Henüz yorum yok. İlk yorumu sen yap!

Yorum bırak

* Yorumlar moderasyon sonrası yayınlanır. E-posta gizli tutulur.