pillinetwork hesabınızla giriş yapın.

asp.net & ado.net treeview ile sonsuz alt kategori (C#)

merhaba özellikle sınırsız alt kategorisi olan veritabanındaki verileri düzgün bir şekilde treeviewe aktarmakta sıkıntı yaşarız bunun için en güzel yollardan biride recurive fonksiyon ile verileri okumaktır...

ama önce tablo yapımızın aşağıdaki gibi olması gerekmektedir :

veri tabanımızın yapısı
veri tabanımızın yapısı

üste kategorisi 0 olanları ana kategorimizi diğerlerini iste onların alt kategorileri olarak kabul ediyoruz... UstKategoriID si ID ye eşit ise kodlarımız onu alt kategori olarak kabul edecektir.

örneğin 124 UstKategoriID sine sahip BoncukEN yine 124 ID sine sahip NazarlıkEN in alt kategorisi konumundadır

şimdi iste treeview imizi sayfamıza yerleştirdikten sonra codebehindda
page_load a

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DataTable dtKategori = new Datatable();
icerik.icerik icerikReff = new icerik.icerik();
dtKategori = icerikReff.kategoriler();
for (int i = 0; i < dtKategori.Rows.Count; i++)
{
if (Convert.ToInt32(dtKategori.Rows[i][2]) == 0)
{
TreeNode dugum = new TreeNode();
dugum.Text = Convert.ToString(dtKategori.Rows[i][1]);
TreeView1.Nodes.Add(dugum);
yazdir(Convert.ToInt32(dtKategori.Rows[i][0]), TreeView1.Nodes[i]);
dtKategori.Clear();
dtKategori = icerikReff.kategoriler();
}
}
dtKategori.Clear();

yazıyoruz... burada önemli olan dtKategori bir DataTable icerikReff.kategoriler() ise ise tblKategori tablomuzdaki bütün kategorileri getiren icerik isimli classımızdaki fonksiyondur... gelen verileri datatable a aktarıp o şekilde kullanmak daha zarif duracaktır...

runProcedure icerik sayfasına kalıtım yoluyla alınmıştır:

1
2
3
4
5
6
7
8
9
10
11
public DataTable runProcedure(string sqlString)
{
DataTable dataTableReff = new DataTable();
commandReff = new OleDbCommand(sqlString, connectionReff);
dataAdapterReff = new OleDbDataAdapter(commandReff);
connectionReff.Open();
dataAdapterReff.Fill(dataTableReff);
connectionReff.Close();
return dataTableReff;
}

1
2
3
4
5
6
public DataTable kategorilerTR()
{
DataTable dtKategoriler = new DataTable();
dtKategoriler = runProcedure("SELECT * FROM tblKategori WHERE Dil = 'Türkçe'");
return dtKategoriler;
}

şimdide

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void yazdir(int ID, TreeNode prmNode)
{
dtKategori.Rows.Clear();
dtKategori.Columns.Clear();
dtAltKategori = icerikReff.altKategoriGetir(ID);
for (int i = 0; i < dtAltKategori.Rows.Count; i++)
{
TreeNode bolum = new TreeNode();
bolum.Text = Convert.ToString(dtAltKategori.Rows[i][1]);
prmNode.ChildNodes.Add(bolum);
yazdir(Convert.ToInt32(dtAltKategori.Rows[i][0]), prmNode.ChildNodes[i]);
dtAltKategori.Clear();
dtAltKategori = icerikReff.altKategoriGetir(ID);
}
}

şeklinde bir fonksiyon oluşturuyoruz bu fonksiyon ise ana kategorilerin alt kategorilerini ve varsa alt kategorilerini getiren fonksiyonumuzdur...

yukarıda gördüğümüz altKategoriGetir(ID) isimli fonksiyon iste bize UstKategorsiID si 0 olmayan kategorieri getirmektedir...

1
2
3
4
dataTableReff.Reset();
DataTable dtAltKategori = new DataTable();
dtAltKategori = runProcedure("SELECT * FROM tblKategori WHERE Dil = 'Türkçe' AND ustKategoriID = " + kategoriID);
return dtAltKategori;

kodları direk kendi projemden aldığım ve genellikle kalıtım kullandığım için karışık gözükebilir ama genel olarak sınırsız alt kategorilerndirme recursive mantığı ile bu şekilde yapılmaktadır...

kolay gelsin

/* mmacit yazdı. 30 Haziran 2009 13:51. 0 yorum var */

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu Yazıyı Tutanlar

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

pilliilan

son yorumlar

arama

pillinetwork