ASP.NET Sınırsız Kategori Yapımı (Recursive İşlemleri)

Merhabalar;

Recursive işlemleri için 2 metod paylaşacağım. Senaryomuzda bir il, ilçe tablosu olsun ve tabloda veriler üst id ile birbirine bağlansın. Tablo yapısı:

ILID | ILUSTID | ILADI şeklinde olsun.

1        | 0               | İSTANBUL

2        | 1               | ADALAR

3        | 1               | ATAŞEHİR

4        | 1               | ÜMRANİYE

5        | 0               | ANKARA

6        | 5               | ÇANKAYA

7        | 5               | KEÇİÖREN

8        | 7               | MAHALLESİ

şeklinde birbirine bağlanmış varsayarsak, biz burada id’si 8 olanı çağırdığımızda bize ANKARA / KEÇİÖREN / MAHALLESİ gibi bir string döndermesini isteyebiliriz.

Bu durumda aşağıdaki kod blogu bize tam bu istediğimizi string olarak dönderecektir.


private string GeriDonder(int id)
{
int sayfam;
string page = string.Empty;
IL il = db.ILs.First(s => s.ILID == id);
if (il.ILALTID != 0)
{
sayfam = (int)il.ILALTID;
page = il.ILADI;
do
{
IL kat2 = db.ILs.First(u => u.ILID == sayfam);
page = kat2.ILADI + " / " + page;
sayfam = (int)kat2.ILALTID;
}
while (sayfam != 0);
}
else
{
page = "0";
}
return page;
}

Diğer bir senaryo ise aynı tablodan bir ağaç yapısı istebiliriz, örnek olarak sınırsız kategori yapısıda verebiliriz. Örn:

İSTANBUL

ADALAR

ÜMRANİYE

ATAŞEHİR

ANKARA

ÇANKAYA

KEÇİÖREN

MAHALLESİ

gibi.

Böyle bir isteğimizi de aşağıdaki kod bloğu tam olarak işimizi görecektir.


private void BelGetir(int altid, int level, Literal asd, string parametre)
{
var Bel = from x in db.ILs where x.ILALTID == altid orderby x.ILADI select new { x.ILALTID, x.ILID, x.ILADI };
foreach (var item in Bel)
{
if (altid == item.ILALTID)
{
asd.Text += "<ul class='kategoriler'>";
}

asd.Text += "<li style='margin-left:" + level * 10 + "px;'><a href='" + parametre + item.ILID + "'>" + item.ILADI + "</a></li>";

BelGetir(item.ILID, level + 1, asd, parametre);
if (altid == item.ILALTID)
{
asd.Text += "</ul>";
}
}
}

Bu metodumuzda bir literal’in içerisine ul li yapısı içerisinde listeletmeyi yaptık. Metod 4 parametre almaktadır.

Altid metodun kendini tekrarlayacağından dolayı her defasında bulunduğu id almaktadır.

Level kaçıncı adımda olduğunu saymaktadır. Ona göre otomatikmen yanına margin eklemektedir.

ASD literalimizin adıdır.

Parametre ise oluşturulacak linkin querysinin nasıl olacağını ayarlamaktadır.

Metodun çağrılma şekli ise aşağıdaki gibidir.


BelGetir(0, 0, ltBeller, url + "&belid=");

// Önce alt id'si 0 olandan başla, ilk adım olduğundan 0 (sıfır) olarak devam et, ltBeller literaline stringleri ekle, ve oluşturulan url'le belid şeklinde bir querystring ata demektedir.

Bol kodlu günler.

Not: Metodlar Entity Framework için hazırlanmıştır. Kullandığınız teknolojiye göre revize edebilirsiniz.

5,633 total views, 2 views today

2 Comments

hzrtysz

about 6 ay ago

işime yaradı, teşekkür edeim :)

Cevapla

Gani

about 6 ay ago

Ben teşekkür ederim :)

Cevapla

Leave a Comment

Ulaşım için: Facebook: /ganigani Twitter: @abdulgani_demir


*

%d blogcu bunu beğendi: