Ö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 (ust_kategori_ID = 10)
Televizyon kategorisine ait alt kategori: SHARP (ust_kategori_ID = 2)
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
<div class="kategoriler"> <asp:Literal ID="ltrKategoriler" runat="server"></asp:Literal> </div>Ç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 strHTML = ""; 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) { strHTML = "<ul>"; 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(); strHTML = strHTML + "<li>"; strHTML = strHTML + "<a href=\"javascript:;\">" + strKategori + " </a>"; strHTML = strHTML + fnKategoriler(strKategori_ID); strHTML = strHTML + "</li>"; } strHTML += "</ul>"; } cmdSQL.Dispose(); drSQL.Dispose(); bag.Close(); return strHTML; }