Asp.Net Dinamik Kontrol Yaratma başlıklı yazımda kontrollerin dinamik olarak nasıl ekleneceğinden yeteri kadar bahsetmiştim. Hatta örnek olarak verdiğim örnekte temel asp.net kontrolu yerine yaratmış olduğumuz bir usercontrol u kullanmıştık. Bu usercontrol u icerisinde birden fazla asp.net temel kontrolunu iceren bir küme bulunmaktaydı. Biz bu usercontrol u temel kontroller iceren bir şablon kontrol olarak düşünebiliriz. Ve biz bu usercontrol u Page nesnesinin LoadControl(string Path) methodunu kullanarak yüklemiştik. Buraya kadar herşey çok güzeldi. Fakat biz bu yüklediğimiz kontrolun içinde ki bir kontrolun değerini değiştirmek istersek napacağız? İşte burda bu konuya açıklık getireceğiz.
Aslinda üzerinde çalıştığımız sorunun cevabı da yine Asp.Net Dinamik Kontrol Yaratma örnek kodunda vermiştik :
((Label)crtl.FindControl(“lblTip”)).Text = Tip;
gördüğünüz gibi usercontrol un icerdiği id si lblTip olan bir Label nesnesini bulup tip dönüşümü ile bu Label nesnesinin özellik (Property) değerleriyle oynayabiliyoruz. Şimdi Şöyle bir örnekle başka bir durumu açıklıyayım. Örneğin bu usercontrol un KENDINE AIT bir özelliği (Property) var. Mesela bu usercontrol un icerisinde Jason Moon’s Takvim script ini kullaniyorsunuz. Ve eger bu script i incelerseniz
DateInput(’independence’, false, ‘YYYY-MM-DD’, ‘1776-07-04′)
şeklinde cağırdınız yerde takvim kontrolu yaratılıyor olduğunu anlarsınız. Şimdi herşey güzel de biz burda 04.07.1776 olan varsayılan değeri yani ilk açıldığında gösterdiği tarihi başka bir tarih yapmak istiyoruz hemde bunu bu usercontrol u yaratan anasayfada ayarlamak istiyoruz iste o zaman olaylar biraz karşık hale geliyormus gibi gelsede aslında kolay bir yönetmi var. Oda Property dediğimiz konudan geciyor. Property leri iyice araştırmanızı tavisye ederim ben çok fazla değinmeyeceğim. Ama şöle bir örnek vereyim :
public partial class KisiselBilgiTemplate : System.Web.UI.UserControl
{
private string _postDate;
public string PostedDate
{
get
{
return _postDate;
}
set
{
_postDate = value;
}
}
…….
gördüğün gibi burda private bir variable public bir Property araclığı ile ulaşıyoruz. Burda Value global bir terim yani eşitleme sirasında eşitliğin atanılacak değerini simgeliyor. Neyse konumuza geri dönelim . Peki ben bu property i ne için kullanıcam işte ben bu tarihi
DateInput(’independence’, false, ‘YYYY-MM-DD’, ‘1776-07-04′)
1776-07-04 yerine benim istediğim bir tarihi mesela doğum günüm olan 03.09.1983 olmasını istiyorum. Zaten global olan bu PostedDate direk kullanabilirim yani şöyle
DateInput(’independence’, false, ‘YYYY-MM-DD’, <% Response.Write(PostedDate)%> )
Html yorumlanir klasik asp deki gibi bir degeri direk istediğimiz yere yazdırabiliyoruz. Bunuda tamamladıktan sonra geldik son kısma peki ben bu Property nin değerini usercontrol u yuklerken programatik olarak nasıl değiştireceğm?
Projede kullandığım kodu direk örnek olarak vererekten açıklamak istiyorum:
private Control BilgiFormlariYaratici(string IdPrefix,string Tip, int Sira,KISITIPLERI TIP,int OdaIndex)
{
Control ctrl = LoadControl("~/Acentalar/UserControls/KisiselBilgiTemplate.ascx");
Type tp = ctrl.GetType();
System.Reflection.PropertyInfo IlkKisi = tp.GetProperty("IletisiBilgiFormu");
if (OdaIndex == 0 && Sira == 0 && TIP == KISITIPLERI.YETISKIN)
{
IlkKisi.SetValue(ctrl,"onClick=\"IletisimBilgisiFormu();\"",null);
}
else
IlkKisi.SetValue(ctrl,string.Empty,null);
((Label)ctrl.FindControl("lblKim")).Text = (Sira + 1) + ". " + Tip;
System.Reflection.PropertyInfo PropInfo = tp.GetProperty("PostedDate");
switch (TIP)
{
case KISITIPLERI.COCUK:
PropInfo.SetValue(ctrl, ",'01-01-2006'", null);
break;
case KISITIPLERI.ILAVE:
PropInfo.SetValue(ctrl, ",'01-01-1980'", null);
break;
case KISITIPLERI.YETISKIN:
PropInfo.SetValue(ctrl, ",'01-01-1970'", null);
break;
default:
PropInfo.SetValue(ctrl, string.Empty, null);
break;
}
ctrl.ID = IdPrefix;
return ctrl;
}
gördüğünüz gibi olay System.Reflection.PropertyInfo sınfında. bu sınıfın SetValue methodu ile dinamik olarak yüklediğiniz usercontol lerin public property lerinin değerlerini değitirebilirsiniz. Ve bölelikle bu konuyuda bu şekilde kapatabiliriz.
Sorularınız olursa yanıtlamaktan tekrar ve tekrar mutluluk duyarım.
Subscribe