Bu makalemizde ASP.Net ile sınırsız kategori ve alt kategori mantığıyla yapılmış bir örneğimizi sizlere aktarmaya çalışacağız.

Asp.Net ile yaptığınız projelerde bazen kategori, alt kategori veya menü, alt menü ihtiyacı doğar. Bu makalemizde bu hiyerarşinin sınırsız döngüye sahip olanı anlatılcaktır. Makalede, kategori ve alt kategori sistemi üzerine örnek yapacağız.
Öncelikle veritabanı tasarımını yapalım. Anlatımlar, access veritabanı üzerinde yapılacaktır.

Veritabanı Sorgusu
CREATE Table tblKategoriler
(
kategori_ID AutoIncrement,
ust_kategori_ID NUMERIC,
kategori TEXT(50)
)


Veritabanımız oluştu. Burada ust_kategori_ID adlı sütunun varsayılan değerinini "0" olarak belirtmemiz gerekir. Çünkü hangi sütunun ana kategori olarak bilinmesindeki bir belirteç olacaktır. Veritabanımızdaki tblKategoriler adlı tabloyu düzenleyip ilgili sütunun varsayılan değerini 0 (sıfır) olarak belirtiyoruz.

Kategoriler



Veritabanımız ile ilgili ayarlamaları yaptık. Şimdi ise ilk olarak ana kategorileri ekleyelim.

Ana kategorilerimiz şunlar olsun: Bilgisayar, Televizyon, Giyim
Alt Kategoriler



Ana kategorilerin (yani en üst kategorilerin) ust_kategori_ID değeri "0" olacak şekilde çalışmamızı ayarladık.

Ana kategorilere ait alt kategorileri de girelim.

Bilgisayar kategorisine ait alt kategoriler: Laptop, Masaüstü, Netbook (ust_kategori_ID = 1)

Televizyon kategorisine ait alt kategoriler: LCD, LED, OLED (ust_kategori_ID = 2)

Giyim kategorisine ait alt kategoriler: Erkek, Kadın, Çocuk, Bebek (ust_kategori_ID = 3)

Alt Kategoriler



2. aşamada alt kategorilerimizi de ekledik.

Eklemiş olduğumuz alt kategorilere ait birkaç alt kategori ekleyelim.
Laptop kategorisine ait alt kategoriler: ASUS, SONY, MSI, MONSTER, APPLE (ust_kategori_ID = 4)
Erkek giyim kategorisine ait alt kategoriler: Takım Elbise, Eşofman
Televizyon kategorisine ait alt kategori: SHARP

Alt Kategoriler



Görüldüğü gibi, basit hiyerarşide birbirini izleyen alt ve üst kategori mantığına göre veritabanımızı oluşturduk.
Şimdi ise yapmamız gereken, ASP.NET ile bunu çalışmamızda göstermek. Bir ASP.NET sayfası oluşturup sayfamızın PAGE_LOAD olayında yazacağımız metodu Literal içerisine yazdıralım.

Default.aspx




Çalışmamıza ekleyeceğimiz uzaylar
using System.Configuration;
using System.Data.OleDb;


Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
ltrKategoriler.Text = fnKategoriler("0");
}
public OleDbConnection fnBaglan()
{
OleDbConnection bag = new OleDbConnection(ConfigurationManager.ConnectionStrings["accessDB"].ConnectionString);
return bag;
}
public String fnKategoriler(String parKategori_ID)
{
String strDonen_Deger = "";
OleDbConnection bag = fnBaglan();
OleDbCommand cmdSQL = new OleDbCommand("SELECT kategori_ID, ust_kategori_ID, kategori FROM tblKategoriler WHERE ust_kategori_ID = " + parKategori_ID + "", bag);
bag.Open();
OleDbDataReader drSQL = cmdSQL.ExecuteReader();
if (drSQL.HasRows == true)
{
strDonen_Deger = "
    ";
    while (drSQL.Read() == true)
    {
    String strKategori_ID = drSQL["kategori_ID"].ToString();
    String strUst_Kategori_ID = drSQL["ust_kategori_ID"].ToString();
    String strKategori = drSQL["kategori"].ToString();

    strDonen_Deger = strDonen_Deger + "
  • ";
    strDonen_Deger = strDonen_Deger + "" + strKategori + " ";
    strDonen_Deger = strDonen_Deger + fnKategoriler(strKategori_ID);
    strDonen_Deger = strDonen_Deger + "
  • ";
    }
    strDonen_Deger += "
";
}
cmdSQL.Dispose();
drSQL.Dispose();
bag.Close();
return strDonen_Deger;
}


Örnek



Kaynak: www.ontedi.com