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:

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 ...

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ç;

Örnek proje.
Yönetim paneli indir.