Türkiye'nin En Eski Webmaster Forumu İyinet'e Hoşgeldiniz!

İç içe repeater kullanımı

Gece Yolcusu

0
Onaylı Üye
Üye
Katılım
27 Ocak 2011
Mesajlar
255
Açılan Konu
44
Tepki puanı
1
Konum
İstanbul
Merhaba aşağıda iç içe asp.net repeater kullanımı anlatılmaktadır.

İç içe repeater kullanımı ve iç içe kategorileme mantığı aşağıda ado.net komutlarıyla deyimleriyle ele alınmıştır. Sonsuz alt kategori mantığını anlamak için database tablolarımıza bir göz atalım.

İç içe sonsuz kategorilemeyi kullanabilmek için tablomuzu aşağıdaki gibi tasarlamalıyız. Tabloda KategoriID ve UstKategoriID sutunları bulunmaktadır bu sütunlardan “KategoriID” primary key “UstKategoriID” satırı da alt kategorileri temsil etmektedir.

Olay şudur:
Satırlardan UstKategoriID’si lisanssız olanlar parent kategoridir.

UstKategoriID’sinde değer olanlar, değerin temsil ettiği parent kategoriye bağlıdırlar. Hatta bir alt kategoriye başka bir alt kategorinin id numarasını verirsek iç içe iki alt kat oluşturmuş oluruz.

Aşağıdaki tabloda bilgisayar, telefon, ev elektroniği ve ofis ve sarf malzemeler üst kategori, desktop pc id numarası 1 olan bilgisayarın, cep telefonu id numarası 2 olan telefon kategorisinin altında yer almaktadır.

ust-kategori-mantigi.jpg


Kategorilerimizi hiyerarşik bir şekilde göstermek için iç içe repeater kullanılabilir. Aşağıda iç içe repeater kullandık. Dış taki repeater (rptKategoriler) sadece ana kategorileri listeleyecek, içteki (rptAltKategori) ise hangi kategorideyse onun altındakileri listeleyecektir.

Kod:
<asp:Repeater runat="server" ID="Repeater1" OnItemDataBound="rptKategoriler_ItemDataBound">
        <ItemTemplate>
            <%#Eval("KategoriAdi") %>
            <asp:Repeater runat="server" ID="rptAltKategori">
                <ItemTemplate>
                    <%#Eval("KategoriAdi") %>
                </ItemTemplate>
            </asp:Repeater>
        </ItemTemplate>
    </asp:Repeater>

Yazılan OnItemDataBound eventi rptKategoriler id sine sahip nesnenin her veritabanından bir veri çektikten sonra OnItemDataBound eventinin çalışmasını sağlar. Bu alana altkategorileri listeleyeceğimiz kodları yazmalıyız.

Dıştaki repeaterin içine dolduruyoruz:

Kod:
SqlConnection conn = new SqlConnection("server=.;database=databaseadi;uid=sa;pwd=123");
SqlCommand cmd = new SqlCommand("select * from Kategoriler where UstKategoriID IS lisanssız", conn);
conn.Open();
rptKategoriler.DataSource = cmd.ExecuteReader();
rptKategoriler.DataBind();
conn.Close();

İç kategorileri listeleyecek OnItemDataBound olayı:

Kod:
protected void rptKategoriler_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Repeater rp = (Repeater)e.Item.FindControl("rptAltKategori"); //İç tarafdaki rpAltKategori kontrolüne erişiyoruz ve rp değişkenine atıyoruz
            SqlConnection baglanti = new SqlConnection("server=.;database=databaseadi;uid=sa;pwd=123");

            //Ana Kategoriye bağlı alt kategorileri seçiyoruz
            SqlCommand cmdAltKat = new SqlCommand("Select * from Kategoriler where UstKategoriID=" + Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "KategoriID").ToString()), baglanti);
            baglanti.Open();
            rp.DataSource = cmdAltKat.ExecuteReader();
            rp.DataBind();
            cmdAltKat.Dispose();
            baglanti.Close();
        }

Örneklerdeki kodları kendinize göre kopyalayıp iç içe repeater kullanımı çalıştırabilirsiniz.
 

Cybokron

0
Onaylı Üye
Üye
Katılım
16 Kasım 2008
Mesajlar
531
Açılan Konu
116
Tepki puanı
20
Konum
istanbul
Ic içe repeater yerine 1 kontroller oluşturup for ile dönmen daha kolay olurdu.

Sent from my GT-N7100 using Webmaster Forums, Powered by Sosyalmedyayoneticisi.com
 
Üst