Ö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
![Asp.Net'te Sınırsız Menü ve Alt Menü Örneği 1](/_d/icerik-dosyalar/164/1.png)
Veritabanımız ile ilgili ayarlamaları yaptık. Şimdi ise ilk olarak ana kategorileri ekleyelim.
Ana kategorilerimiz şunlar olsun: Bilgisayar, Televizyon, Giyim
Alt Kategoriler
![Asp.Net'te Sınırsız Menü ve Alt Menü Örneği 1](/_d/icerik-dosyalar/164/2.png)
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
![Asp.Net'te Sınırsız Menü ve Alt Menü Örneği 1](/_d/icerik-dosyalar/164/3.png)
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
![Asp.Net'te Sınırsız Menü ve Alt Menü Örneği 1](/_d/icerik-dosyalar/164/4.png)
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; }