İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

İç içe repeater kullanımı

Gece Yolcusu

0
İyinet Üyesi
Katılım
27 Ocak 2011
Mesajlar
255
Reaction score
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
İyinet Üyesi
Onaylı Üye
Katılım
16 Kasım 2008
Mesajlar
530
Reaction score
21
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
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst