Blogum

03
Mart
DropDownList Kategorileme

Bu makalemizde, alışveriş sitelerinde sıkça karşılaştığımız iç içe kategorilerin nasıl tasarlandığını  anlatmaya çalışacağız.

Pek çok yöntem mevcut elbet. Fakat biz işi mümkün olduğunca hızlı, anlaşılır şekilde çözmek zorundayız.  Biz bu uygulamamızda tek tablo kullanacağız. Tüm alt kategorileri ve üst kategorileri tek tabloda tutacağız. Daha sonra C# kodlarımızla sonsuz (recursive) bir döngü kurgulayıp tüm kategorilerimizi yazdıracağız. Bunun için öncelikle “veritabani” isminde bir veritabanı oluşturalım. İçerisine “kategoriler” ismiyle yeni bir tablo açarak aşağıdaki gibi tablo alanlarımızı ve ilişkileri tanımlayalım.

 
 

Şimdi de verilerimizi ekleyelim.

 

Verilerimizi de eklediğimize göre artık işin programlama kısmına geçebiliriz. Bunun için asp.net projenizde yeni bir sayfa oluşturun ve bir adet dropdownlist ekleyin.

 <asp:DropDownList ID="DropKategori" runat="server">

</asp:DropDownList>

 Şimdi .cs sayfamıza geçerek Page_Load blokları içerisine kodlarımızı yerleştirelim.

 using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Data.OleDb;

using System.Data;

 public partial class sinirsiz_kategori : System.Web.UI.Page

{

    DataTable dt;

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!Page.IsPostBack)

        {

            //veritabanından kategorilerimizi çekiyoruz

            SqlConnection baglanti = new SqlConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath("~/App_Data\\veritabani.mdb"))";

            baglanti.Open();

            dt = new DataTable();

            OleDbDataAdapter Adapter = new OleDbDataAdapter ();

            Adapter = new OleDbDataAdapter ("SELECT k_id, anakat_id, kat FROM kategoriler", baglanti);

            Adapter.Fill(dt);

            baglanti.Close();

            DropKategori .Items.Clear();

            DataRow[] RootRows = dt.Select("anakat_id=0");

            DDLDoldur(RootRows, "");

        }

    }

     //kategorileri dropdownlist'e dolduran metodumuz

    //buradaki drc, listeye doldurulacak olan kayıtları temsil ediyor.

    //girinti değişkeni ise her alt kategoride içeri girinti yapmamızı sağlayacak

    protected void DDLDoldur(DataRow[] drc, string girinti)

    {

        //datarow dizisindeki elemanları döngüye alıp listeye ekliyoruz

        //eğer gelen dizide kayıt yoksa zaten döngüye hiç girilmeyecektir.

        foreach (DataRow dr in drc)

        {

            //öncelikle listItem elemanını tanımlıyoruz

            ListItem li = new ListItem();

            //text özelliğine kategori adı

            li.Text = girinti + dr["kat"].ToString();

            //value özelliğine kategori ID'si

            li.Value = dr["k_id"].ToString();

            //ve elemanı listeye ekliyoruz

            DDLKtg.Items.Add(li);

             //döngüdeki her kategori (row) için alt kategoriler alınıyor.(varsa)

            DataRow[] SubRows = DT.Select("anakat_id= " + dr["k_id"].ToString());

            //ve aynı metodumuzu alt kategoriler için tekrar çağırıyoruz. Böylece alt kategorileir de listelemiş oluyoruz.

            DDLDoldur(SubRows, girinti + "---");

            //alt kategoriler bitene kadar metodun kendisini çağırma işlemi devam eder.

            //eğer alt kategori yoksa metod kesilir ve bir üst döngüye devam edilir

        }

    }

}

 

Eklenme Tarihi  :  03.3.2014     Okunma Sayısı: 153  kez okundu    Paylaş : Facebookta Paylaş

Bu Yazıya Yapılan Yorumlar


Bu yazıya eklenmiş yorum bulunamadı

Bu Yazıya Yorum Yaz



  •    
  •    
  •    
  •  

  •                 Gönder    Temizle
Mesaj Kutusu