folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Asp.Net'te Sınırsız Menü Ve Alt Menü Örneği 1



Asp.Net'te Sınırsız Menü Ve Alt Menü Örneği 1

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    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

    Asp.Nette%20Sınırsız%20Menü%20ve%20Alt%20Menü%20Örneği%201


    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.Nette%20Sınırsız%20Menü%20ve%20Alt%20Menü%20Örneği%201

     

    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.Nette%20Sınırsız%20Menü%20ve%20Alt%20Menü%20Örneği%201


    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

    Asp.Nette%20Sınırsız%20Menü%20ve%20Alt%20Menü%20Örneği%201


    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 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 = "<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();
    
                strDonen_Deger = strDonen_Deger + "<li>";
                strDonen_Deger = strDonen_Deger + "<a href=\"javascript:;\">" + strKategori + " </a>";
                strDonen_Deger = strDonen_Deger + fnKategoriler(strKategori_ID);
                strDonen_Deger = strDonen_Deger + "</li>";
            }
            strDonen_Deger += "</ul>";
        }
        cmdSQL.Dispose();
        drSQL.Dispose();
        bag.Close();
        return strDonen_Deger;
    }


    Örnek

    Asp.Nette%20Sınırsız%20Menü%20ve%20Alt%20Menü%20Örneği%201

     

    Kaynak: http://www.ontedi.com/aspnet/aspnette-sinirsiz-menu-ve-alt-menu-ornegi-1


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    FCN
    FCN's avatar
    Kayıt Tarihi: 28/Eylül/2007
    Erkek

    mantığı anlatmak için olabilcek bir örnek fakat sql sorgu kısmında sql injection var hocam. parametre kullanmalısın.

    eline sağlık

    FCN tarafından 24/May/15 18:39 tarihinde düzenlenmiştir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek
    FCN bunu yazdı

    mantığı anlatmak için olabilcek bir örnek fakat sql sorgu kısmında sql injection var hocam. parametre kullanmalısın.

    eline sağlık

    Sonradan farkettim, zaten gelen parametre ziyaretçi taraflı olmadığı için çok sorun olacağını sanmıyorum.


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Oy oy oy, recursive db query! Bu mantıkla yapacaksanız tabloyu tek seferde çekin, sıramalama olayını JS ile kullanıcının makinesinde halledin.

     


    Olaylara karışmayın!
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek
    YeniHarman bunu yazdı

    Oy oy oy, recursive db query! Bu mantıkla yapacaksanız tabloyu tek seferde çekin, sıramalama olayını JS ile kullanıcının makinesinde halledin.

     

    +1 bu recurvise query çok boktan oluyor. o yüzden yeniharman'ın dediği gibi yapmak gerekiyor. birde self referance'danda kaçınmak-engellemek gerek yoksa infinite loop yüzünden IIS'i patlatıp 12-13 saat sorun nerelerde diye aramak zorunda kalabilirsiniz :D


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NuLL29
    NuLL29's avatar
    Kayıt Tarihi: 09/Temmuz/2007
    Erkek

    Hocam sp yazın atın generic liste her seferinde menüyü çekmek için db ye gitmeyin hatta birde cache yapın tam olsun.

     

    edit: cache mekanizması için örnek vereyim

    public static List<MenuGetirSpResult> MenuGetir ()

            {

                lock (objLock)//aynı anda ulaşımı çift ulaşımı kitleyerek sıraya alıyoruz

                {

                    if (HttpRuntime.Cache["Menu"] == null)

                    {

                        DBDataContext firma = new DBDataContext(Ayarlar.ConnectionString());

                        List<MenuGetirSpResult> listMenu = firma.MenuGetirSp(null).ToList();

     

                        HttpRuntime.Cache.Insert("Menu", listMenu, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(30));

                    }

                    return HttpRuntime.Cache["Menu"] as List<MenuGetirSpResult>;

                }

                return HttpRuntime.Cache["Menu"] as List<MenuGetirSpResult>;

            }

    bunuda menüye ekle/çıkar güncelle işlemlerinin altına eklerseniz

    public static void TumCacheyiSil()

            {

                foreach (System.Collections.DictionaryEntry KeslenmisData in HttpContext.Current.Cache)

                {

                    HttpContext.Current.Cache.Remove(KeslenmisData.Key.ToString());

                }

     

            }

     

     

    NuLL29 tarafından 24/May/15 23:09 tarihinde düzenlenmiştir

    .::::Tesadüfen Doğdum Mecburen Yaşıyorum Zorudan Ölücem:::...
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    sahinka
    sahinka's avatar
    Kayıt Tarihi: 04/Mayıs/2012
    Erkek

    Anakategoriyi nasıl ekliyosun  

    selectbox ekleyip ordan   1.YeniAnakategori 2.bilgisayar  3.laptop   gibi bi şey mi yaptın  

    Yenianakategorinin selectvaluesunuda 0 yapıp  anakategori olarak mı ekletiyosun  joinli karmaşık sorgular yerine basit işlerde kullanılır   


    imza
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hannibal_King
    Hannibal_King's avatar
    Kayıt Tarihi: 22/Ağustos/2010
    Erkek

    @terror hocam self-reference ne oluyodu.Açıklarmısın biraz daha ayrıntılı.


    lrny.app
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek
    sahinka bunu yazdı

    Anakategoriyi nasıl ekliyosun  

    selectbox ekleyip ordan   1.YeniAnakategori 2.bilgisayar  3.laptop   gibi bi şey mi yaptın  

    Yenianakategorinin selectvaluesunuda 0 yapıp  anakategori olarak mı ekletiyosun  joinli karmaşık sorgular yerine basit işlerde kullanılır   

    Selectin varsayılan değeri (ilk değeri) <option value="0">Üst Kategori Olsun..</option> şeklinde belirtiyorum.

     

    Bu arada güzel yönergeler çıkıyor, teşekkürler.


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
Toplam Hit: 1659 Toplam Mesaj: 9