Repeater’da en büyük sıkıntılardan biri Repeater.FindCondtrol() ile sadece item ve alternatingitem template gibi kısımlarda bulunan kontrollere erişebilmektedir bu makalemizde header ve footer template’deki controllere erişimide görmüş olacağız.
Alttaki kodlarla Asp.Net nesnesi olan bir repeater oluşturuyoruz ve HeaderTemplate, ItemTemplate ve FooterTemplate bloklarını kullanıyoruz.
1 2 3 4 5 6 7 8 9 10 11 | <asp:Repeater ID="rptUrunler" runat="server"> <HeaderTemplate> <asp:Label ID="lblUstBaslik" runat="server" Font-Bold = "true" /><br /> </HeaderTemplate> <ItemTemplate> <%#Eval("Ad") %> - <%#Eval("Ucret") %><br /> </ItemTemplate> <FooterTemplate> <asp:Label ID="lblAltBaslik" runat="server" Font-Bold = "true" /> </FooterTemplate> </asp:Repeater> |
Şimdi ise Sayfamızın Page_Load olayında altta göreceğiniz üzere sanal bir tablo oluşturmak için DataTable sınıfından faydalanıyoruz ve iki tane kolon ekliyoruz kolon adları bildiğiniz üzre üstteki Eval’lere yazdıklarımız ile aynı olmalı bunlar (Ad ve Ucret) alanlarıydı. daha sonra Repeterdaki header’i almak için şu şekilde bir syntax kullanıyoruz.
1 | Control HeaderTemplate = rptUrunler.Controls[0].Controls[0]; |
Üstteki kodda HeaderTemplat’e ulaşmak için ilk controls’e değer olarak 0 geçerek ulaşıyoruz.
1 | Control FooterTemplate = rptUrunler.Controls[rptUrunler.Controls.Count - 1].Controls[0]; |
Üstteki gibi bir kullanım ile headertemplat’e ulaşımından tek farkı ilk controls’e değer olarak rptUrunler adlı repeaterdaki control sayısın 1 eksiği diyerek footertemplat’e ulaşmış oluyoruz.
Çoğu programlama dillerinde Count, Length gibi özelliklerden değer almaya çalıştığımızda dönen sonuç sıfır bazlı olmadığı için yani sayım 0’dan değilde 1’den başladığı için değeri geçtiğiniz yer 0 bazlı ise -1 ibaresi kullanıp 0 bazlı olarak dönüştürebilirsiniz yapmadığınız taktirde büyük ihtimal son işlemde exception fırlatacaktır.
Kodların tamamı ise Page_Load event’inde şu şekilde olacak
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //Sanal tablo oluşturuluyor DataTable Kayitlar = new DataTable(); Kayitlar.Columns.AddRange(new DataColumn[2] { new DataColumn("Ad"), new DataColumn("Ucret") }); Kayitlar.Rows.Add("Gömlek", 200); Kayitlar.Rows.Add("Top", 30); Kayitlar.Rows.Add("Şapka", 22.5); //Repeater nesnesine sanal tablo set ediliyor rptUrunler.DataSource = Kayitlar; rptUrunler.DataBind(); //Headertemplate'ye erişilmeye çalışıyor Control HeaderTemplate = rptUrunler.Controls[0].Controls[0]; Label lblUstBaslik = HeaderTemplate.FindControl("lblUstBaslik") as Label; lblUstBaslik.Text = "Üst Başlık"; //FooterTemplate'ye erişilmeye çalışılıyor. Control FooterTemplate = rptUrunler.Controls[rptUrunler.Controls.Count - 1].Controls[0]; Label lblAltBaslik = FooterTemplate.FindControl("lblAltBaslik") as Label; lblAltBaslik.Text = "Alt Başlık"; } } |
Hocam repeater içerisinde bir dropdownlist var ve benim bunun selectedindexchanged eventine erişmem gerekiyor. Bu evente nasıl ulaşacağım?