Sınırsız Ağaç Yapısı İle Kategori Listeleme

9 Nisan Cuma, 2010 | Asp.net C# Ado.Net /*Yorumlar (10)*/

Öyle bir tablotable olsun ki sınırsız kategori ve alt kategori ekleyebileyim. Neden bahsettiğimi anladınız sanırım :) Halk arasında Sınırsız Ağaç Yapısı denilen tablo çeşidi.

Örnek tablo:
Data Diagram

Yapı şöyle olacak;
Kategori, hiyerarşinin en üstünde ise alt kategori değeri 0sıfır değilse üst kategorinin id değeri yer alacak.
Örneğin;
Kitap, kendi kategorisinde en tepede yani alt kategori değeri 0. Dünya Klasikleri ise Kitap kategorisinin altında olduğu için alt kategori değeri Kitap kategorisinin CategoryID değeri olacak yani 1 gibi ...
Data

Azıcık kod yazalım.
Kategori tablosunu DataTable nesnesine doldurarak başlayalım. Bu hamle işimizi bi hayli kolaylaştıracaktır. Daha sonra recursiveyinenelen bir metot yardımıyla kategori ve alt kategori bitinceye kadar dönelim. Son olarak ta elde ettiğimiz değerleri Treeview controlülüne nodedüğüm olakarak ekleyelim.

"Eğer karışık geldi ise biraz recursive çalışın."

DataTable dt = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(
        "Data Source=.;Initial Catalog=Ordek;Integrated Security=True");
    SqlDataAdapter dap = new SqlDataAdapter(
        "select * from Category order by SubCategoryID", con);
    dap.Fill(dt);
    populateData(TreeView1.Nodes[0], getrows("0"));
}
 
DataRowCollection getrows(string id)
{
    DataView dw = new DataView(dt);
    dw.RowFilter = "SubCategoryID=" + id;
    return dw.ToTable().Rows;
}
 
void populateData(TreeNode node, DataRowCollection col)
{
    foreach (DataRow row in col)
    {
        TreeNode n = new TreeNode(row[1].ToString());
        node.ChildNodes.Add(n);
        populateData(n, getrows(row[0].ToString()));
    }
}

Sonuç;
Result

Örnek proje.

Yönetim paneli indir.

Yorumlar

recep

hocam harikasınız

20 Mayıs Perşembe, 2010

leyla kararaca

çok faydalı oldu uğraşıp duruyordum yapamamıştım , teşekkürler..

18 Şubat Cuma, 2011

Mustafa ÇETİN

treeview database ilişkisi ile ilgili o kadar döküman okudum. Sonunda sizin makalenizle çözdüm. Gerçekten çok ama çok teşekkür ederim...

18 Şubat Cuma, 2011

null

makbule geçti tşk ler.

28 Şubat Pazartesi, 2011

yunus emre keskin

merhabalar, teşekkür ederim Emre bey yalnız bu sistemin admin tarafında yönetim ekleme kısmını nasıl yapacağımıza dair bilgiler de verebilir misiniz?

4 Haziran Cumartesi, 2011

Emre AYRILMAZ

Yönetim paneli eklendi.

26 Mart Pazartesi, 2012

Kurtuluş

projeyi biraz önce deneme fırsatım oldu kategoriye tıkladığımız zaman sayfa kendini yenileyerek altına tekrar kategorileri getiriyor bir alt kategoriyi göstermeden.

8 Mayıs Salı, 2012

Emre AYRILMAZ

Az önce tekrar test ettim ve herhangi bir probleme rastlamadım. Dile getirmiş olduğunuz hadise olmasın diye;

17 nolu satırda postback kontrolü
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)//17 nolu satır
        fill();//treeview dolduran metot
}
ve
28 nolu satırda tree nodları temizleyen
void fill()
{
    SqlConnection con = new SqlConnection(
            "Data Source=.;Initial Catalog=Ordek;Integrated Security=True");
    SqlDataAdapter dap = new SqlDataAdapter(
        "select * from Category order by SubCategoryID", con);
    dap.Fill(dt);
    TreeView1.Nodes[0].ChildNodes.Clear();//28 nolu satır
    populateData(TreeView1.Nodes[0], getrows("0"));
}
kodlar bulunmakta.

10 Mayıs Perşembe, 2012

Gürsel

TreeView1 leri göremiyor neden olabilir?bir de rica etsem dll in yapısını da yani kodlarını da paylaşabilir misiniz? ayrıca bu proje web form mu yoksa web app mi?

17 Mayıs Perşembe, 2012

Emre AYRILMAZ

İki projeninde kaynak kodları (bir çok yoruma istinaden tekrar tekrar çalıştığı kontrol edildi) yazının sonunda mevcut. Projeler "Web Application" olarak oluşturulmuştur. 

18 Mayıs Cuma, 2012

Yorum Yaz

Ad

Email (sahte adresli yorumlar silinir.)

Yorum