"Enter"a basıp içeriğe geçin

Asp.Net Sınırsız Kategori Listeleme

Merhabalar yazılımcı dostlarım,

İşlerimin yoğunluğundan buraları baya bir boşladım kabul ediyorum. Bundan sonra buraya bol bol makale yazacağım.  🙂

Bu yazıda web dünyasında çok fazla kullanılan sınırsız kategori oluşturma ve listeleme işlemlerinin nasıl yapıldığını anlatacağım. Aslında mantık çok basit ama nedense herkes bu işlem sırasında zorlanıyor. Umarım bu makale size yardımcı olur bundan sonra.

Bu kadar konuştuktan sonra işe koyuluyoruz.

1. Adım: Veritabanı Tablo Tasarımı

asp.net_sinirsiz_kategori_listeleme_tablo

 

 

 

 

Tablomuzun tasarımı bu şekilde olacaktır. Şimdi tablomuzu açıklayalım. Name alanı kategorimin ad bilgisini saklamak için gerekli. MainCatID alanım ise eklenen kategorinin ana kategori mi ? alt kategori mi ? ayrımını yapmak için gerekli. Nasıl yani ? dediğinizi duyar gibiyim.

Bilgisayar adında bir kategori ekledim ve MainCatID değerini 0 olarak belirledim. Bu eklediğim Bilgisayar adlı kategorim ana kategori olacağı için MainCatID değerini sıfır olarak belirledim.

Bilgisayar -> Laptop şeklinde bir ekleme işlemi yapmak istiyorum. Bunun için ise tabloma gelip Laptop kategorisini ekliyorum daha sonra MainCatID alanına daha önceden eklediğim Bilgisayar  kategorimin ID değerini alıp MainCatID alanına ekliyorum.

Yani yapımız bu şekilde olacak.

asp.net_sinirsiz_kategori_listeleme_tablo2

 

 

 

Bu yapıya göre sonsuza kadar alt alta kategori ekleme işlemi yapabiliriz. Mantık çok basit aslında 🙂

2. Adım: Verilerimizi Listeleme Kısmı

Ben verilerimi Literal kontrolünde listeleme istedim. Siz başka bir kontrol tercih edebilirsiniz.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="UnlimitedCategory.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:Literal ID="ltlCategory" runat="server"></asp:Literal>
    </form>
</body>
</html>

Default.aspx.cs kısmında listeleme işlemini gerçekleştirecek kodlarım yer alıyor.

Not: Bu işlemleri Entity Framework kullanarak LINQ ile listeledim. Siz isterseniz Ado.Net’e uyarlayabilirsiniz.

CategoryTestEntities db = new CategoryTestEntities();
        protected void Page_Load(object sender, EventArgs e)
        {
            //Listeleme işlemini gerçekleştirdik. İsterseniz bunu bir buton arkasına vs ekleyebilirsiniz.
            MainCategoryGetAll();
        }
        string categoryText = "";
        private void MainCategoryGetAll()
        {
            //Anakategorimin listesini elde ettim.
            List<Categories> mainCategories = db.Categories.Where(x => x.MainCatID == 0).ToList();

            categoryText = "<ul>";
            foreach (Categories item in mainCategories)
            {
                categoryText += "<li>" + item.Name + "</li>";
                subCategoryGetList(item.ID);

            }
            categoryText += "</ul>";
            ltlCategory.Text = categoryText;
        }

        private void subCategoryGetList(int mainCatID)
        {
            //Alt kategorilerimin listesini parametre ile gelen mainCatID ile elde ettik.
            List<Categories> subCategories = db.Categories.Where(x => x.MainCatID == mainCatID).ToList();

			//Burada subCategories.Count() == 0 ile alt menüsü yok ise html kodları ekleme dedik.
            if (subCategories.Count() == 0)
            else
            {
                categoryText += "<ul>";
                foreach (Categories item in subCategories)
                {
                    categoryText += "<li>--" + item.Name + "</li>";
                    subCategoryGetList(item.ID);
                }
                categoryText += "</ul>";
            }
        }

Ekran Çıktısı

asp.net_sinirsiz_kategori_listeleme

 

 

 

 

 

Örneği buradan indirebilirsiniz.

Yorumlarınızı ve fikirlerinizi paylaşırsanız sevinirim 🙂 Kendinize iyi bakın saygı ve sevgilerle…

4 Yorum

  1. Merhaba Faruk.

    Paylaşım çok başarışı teşekkürler. Bir sorun daha olacak, bu mantıkla breadcrumb nasıl yaparız peki? Örneğin bir makaleye girdik makalenin üstünde kategori kırılımını göstermek gibi.
    C#>Linq>Linq To Sql
    Gibi.

    • Ömer Faruk Özkan Ömer Faruk Özkan

      Merhaba Ekrem,

      Bu konu ile alakalı bir makale yazıcam not aldım. Fakat sana şu anda buradan incelemek için bir kaynak önerebilirim.

  2. eyyup eyyup

    acaba kategori ve alt kategorini adını tek satırda nasıl listeleyebiliriz aşğıdaki örnekteki gibi bir türlü yapamadım

    Ana Kategori

    Ana Kategori > Alt Kategori

    Ana Kategori > Alt Kategori > Alt Kategori

    Ana Kategori > Alt Kategori > Alt Kategori > Alt Kategori

  3. GÇ

    acaba bunu içinde html kodları olmadan repeater veya gridview ile nasıl yapabiliriz?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir