13 Mayıs 2010 Perşembe

Asp.net Dinamik event handler ve Dinamik Kontroller

Merhaba arkadaşlar. kısa olmasına karşın çok pratik bir kod paylaşacağım.
Bu kodda asp.net kontrollerini dinamik oluşturacağız. ama sırf bunu anlatmak için açmadım konuyu. birde

ajax ile de kullanabileceğiniz kullanabileceğiniz dinamik event handler atama işlemine değineceğim.

Sayfamıza bir placeholder ekleyelim ve pageload'a gelelim

for(int i=1;i<10;i++)
{
Button tus = new Button();
tus.Click += new System.EventHandler(this.tikla);
tus.ID = "tus" + i.ToString();
tus.Text = "Tus " + i.ToString();
PlaceHolder1.Controls.Add(tus);


Literal lt = new Literal();
lt.Text = "
";
lt.ID = "lit" + i.ToString();
PlaceHolder1.Controls.Add(lt);
}

kodumuz yukarıda biraz açıklayacak olursak. for döngümüz içinde buton sınıfından bir nesne

oluşturuyoruz. bu nesnenin click özelliğine kendi yazdığımız tıkla fonksiyonunu atıyoruz. id'sini ve

text'ini fordaki i değişkenimizle, sıralı oalcak şekilde atıyoruz (tus1,tus2..) evet butonumuz oluştu.

şimdi bunu sayfamızda görebilmek için placeholder nesnemize atalım.

2. bölümde aynı işlemleri literal için yapıyoruz. alt satıra atmak için literal textine
br atıyoruz.hiç dinamik kontrol kullanmayanlara örnek olması için. bir de literal oluşturdum.

Şimdi fonksiyonumuza geçelim. bu fonksiyon yukarıda butonlara atadığımız kendi yazacağımız fonksiyon.

static butonlarda butona çift tıklayınca çıkan onclick fonksiyonundan pek farklı değil.


protected void tikla(object sender, EventArgs e)
{


System.Web.UI.WebControls.Button dugme = sender as System.Web.UI.WebControls.Button;


if (dugme != null)
{
Response.Write(dugme.Text+" basıldı");


//buton numarasını alabiliriz. veri tabanındaki id'yi atadıysak querystring yerine

kullanabiliriz.
int id = Convert.ToInt32(dugme.ID.Replace("tus",""));

}


}

kısaca açıklayacak olursak.normal click fonksiyonundan farklı olarak biz bu fonksiyonu for döngüsü

içinde 10 tane butona atatık. ve hangi butona tıklandığına ilişkin bir kod yazacağız fonksiyona.

sender objnesnesizim butonumuzu temsil ediyor bu zaten static fonksiyonlarda da var. ama bunu yine

System.Web.UI.WebControls sınıfından butona çevirmeden direkt kullanamıyoruz.(fonksiyon içindeki ilk kod

bunu yapıyor) dugme nesnesine atadık.

2. kodda null olmadığından emin olalım her ihtimale karşı önlemimizi alalım. evet artık hangi butona

tıklandığını bulmuş olduk. bu butonun text'ini yazdıyoruz. buton id'sindeki tus kelimesini replace

ederek de numarasını buluyoruz.

bu numara bulma işlemi eğer for değilde bir db'den çekilen kayıtla oluşturulmuş nesnelerde (veri

tabanındaki kayıt id'si atanmışsa) direkt bize id'yi verir. evet kısa da olsa ajaxla uğraştığım

zamanlarda geliştirdiğim bana çok kolaylık sağlamış bir koddur.

Ajaxla uğraşanlar bilirler request işlemlerini kullanmak istediğimizde başımız belaya girer :) her

sayfaya query string de gönderemeyiz. çünkü yenilenmemesi gerekir.yada link olması gerekir.

işte bu gibi durumlarda bu kod kurtarıcınız olacakatır.
id göndermeden işlem yapmak isterseniz. yine server ve asp.net tabanlı güzel bir çözümdür.

aynı zamanda birden çok butonu tek fonksiyondan kontrol etmek isterseniz yine buradan

faydalanabilirsiniz.

Kaynak: http://www.kodaman.org/yazi/asp-net-dinamik-event-handler

Hiç yorum yok:

Yorum Gönder