Veysel Uğur KIZMAZ

Asp.Net Repeater ItemDataBound ve FindControl ile Veri Bağlama

12.05.2013Okunma Sayısı: 18407Kategori: ASP.NET

Asp.Net’te veritabanından aldığınız verileri Repeater kontrolüne eklerken genellikle Eval metodu kullanılır. Eval metodu ile verileri sayfa üzerinde normal yazı gibi ekleyebilirsiniz. Peki bunun yerine bir kontrol kullanıp (TextBox, HyperLink vb) verileri bu kontrole bağlamak isterseniz ne yapmanız gerekir? Asp.Net Repeater kontrolünün ItemDataBound olayı bu noktada devreye girmektedir.

Öncelikle ilk yöntem olan Eval metodu ile Öğrenci listesini Repeater kontrolüne ekleyelim. Ardından aynı işlemi ItemDataBound ile gerçekleştirelim.

Öncelikle öğrenci bilgilerini tutacağımız Ogrenci sınıfını oluşturalım.

public class Ogrenci
{
    public string Ad { get; set; }
    public string Soyad { get; set; }
}

Şimdi OrnekEval.aspx isminde bir web form oluşturalım ve forma repeater kontrolünü ekleyip ad ve soyad bilgilerini yanyana yazalım.

<asp:Repeater ID="rptOgrenciler" runat="server">
    <ItemTemplate>
        <%#Eval("Ad") %> <%#Eval("Soyad") %>
        <br />
    </ItemTemplate>
</asp:Repeater>

 

Son olarak formun Page_Load olayında öğrenci kayıtlarını oluşturup rptOgrenciler isimli kontrole bağlayalım.

protected void Page_Load(object sender, EventArgs e)
{
    List<Ogrenci> ogrenciler = new List<Ogrenci>()
    {
        new Ogrenci{Ad = "Veysel Uğur", Soyad = "Kızmaz"},
        new Ogrenci{Ad = "Burak", Soyad = "Tungut"},
        new Ogrenci{Ad = "Muhammed", Soyad = "Önal"},
        new Ogrenci{Ad = "Selin", Soyad = "Yetimoğlu"},
        new Ogrenci{Ad = "Esra", Soyad = "Sedef"}
    };
    rptOgrenciler.DataSource = ogrenciler;
    rptOgrenciler.DataBind();
}

 

Projeyi çalıştırdığınızda öğrenci isimlerinin altalta yazdığını göreceksiniz.

Öğrenci ad ve soyad bilgilerinin textbox kontrollerinde görünmesini istiyoruz. Bu işlem için OrnekKontrol.aspx isminde bir web form oluşturalım ve forma repeater kontrolünü ekleyip ad ve soyad bilgilerinin yer alacağı TextBox kontrollerini yanyana yerleştirelim.

<asp:Repeater ID="rptOgrenciler" runat="server">
    <ItemTemplate>
        <asp:TextBox ID="txbAd" runat="server"></asp:TextBox>
        <asp:TextBox ID="txbSoyad" runat="server"></asp:TextBox>
        <br />
    </ItemTemplate>
</asp:Repeater>

 

Oluşturduğumuz repeater kontrolüne önceki formdaki gibi verileri oluşturup bağlayalım.

List<Ogrenci> ogrenciler = new List<Ogrenci>()
{
    new Ogrenci{Ad = "Veysel Uğur", Soyad = "Kızmaz"},
    new Ogrenci{Ad = "Burak", Soyad = "Tungut"},
    new Ogrenci{Ad = "Muhammed", Soyad = "Önal"},
    new Ogrenci{Ad = "Selin", Soyad = "Yetimoğlu"},
    new Ogrenci{Ad = "Esra", Soyad = "Sedef"}
};
rptOgrenciler.DataSource = ogrenciler;
rptOgrenciler.DataBind();

 

Projeyi çalıştırdığınızda 5 satır ve her satırda 2 TextBox kontrolünün oluştuğunu göreceksiniz.

TextBox kontrolleri içine veri ekleme işlemini repeater kontrolünün ItemDataBound olayında gerçekleştireceğiz. Şimdi rptOgrenciler isimli kontrolün ItemDataBound olayını ekleyelim.

<asp:Repeater ID="rptOgrenciler" runat="server" OnItemDataBound="rptOgrenciler_ItemDataBound">
    <ItemTemplate>
        <asp:TextBox ID="txbAd" runat="server"></asp:TextBox>
        <asp:TextBox ID="txbSoyad" runat="server"></asp:TextBox>
        <br />
    </ItemTemplate>
</asp:Repeater>

 

Formun codebehind tarafında rptOgrenciler_ItemDataBound isimli metod oluştuktan sonra bu metod içinde verileri TextBox kontrollerine bağlama işlemini gerçekleştirebiliriz.

ItemDataBound olayı, ogrenciler listesindeki verileri repeater kontrolüne satır satır bağlama işlemini yapmaktadır. Önce listenin ilk elemanını (Veysel Uğur - Kızmaz) alır ve bu elemanı ilgili TextBoxlara bağlar. Sonrasında ikinci elemanını (Burak – Tungut) alır ve bu elemanı da ilgili TextBoxlara bağlar. Bu şekilde tüm elemanları tek tek işleyecektir. Listemizde 5 eleman olduğu için bu metod 5 kere çalışacaktır (her eleman için bir kere).

Repeater ItemDataBound metodunda hangi satırda işlem yapıldığı e.Item.DataItem özelliğinde yer almaktadır.  Bu kaydı eğer bağlanan veri türüne dönüştürürseniz işlem yapacağınız elemana ulaşabilirsiniz.

Ogrenci ogrenci = (Ogrenci)e.Item.DataItem;

Repeater ItemDataBound metodu içinden kontrollere erişebilmek için e.Item.FindControl(“”) metodu kullanılmaktadır. Parametre olarak işlem yapılacak kontrolün ID özelliği yazılır. Kontrolün türündeki bir değişkene aktarıp kontrol üzerinde işlemlerinizi yapabilirsiniz.

TextBox txbAd = (TextBox)e.Item.FindControl("txbAd");
TextBox txbSoyad = (TextBox)e.Item.FindControl("txbSoyad");

Son olarak TextBox kontrollerine değerlerini atayalım.

txbAd.Text = ogrenci.Ad;
txbSoyad.Text = ogrenci.Soyad;

Kodlama tamamlandıktan sonra rptOgrenciler_ItemDataBound metodunun son hali aşağıdaki gibi olacaktır.

protected void rptOgrenciler_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Ogrenci ogrenci = (Ogrenci)e.Item.DataItem;
    TextBox txbAd = (TextBox)e.Item.FindControl("txbAd");
    TextBox txbSoyad = (TextBox)e.Item.FindControl("txbSoyad");
    txbAd.Text = ogrenci.Ad;
    txbSoyad.Text = ogrenci.Soyad;
}

Projeyi çalıştırdığınızda TextBox kontrollerine listedeki değerlerin yerleştiğini göreceksiniz.

Yepyeni makalelerde görüşmek dileğiyle :)

 

Yepyeni makalelerde görüşmek dileğiyle :)
 
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com