SQL Server da sınırsız kategorinin tablo yapısı ve sorgulaması nasıl olur, asp.net de TreeView ile nasıl kullanılır sizlerle paylaşacağım.
1. Sınırsız Kategori Görünümü
2. Tablo Yapısı
ID değerimiz Primary Key olmalı ve Column Properties Ayarlarında Identity Specification açık olmalıdır. Bu her kayıt girdiğimizde ID değerimizi otomatik olarak increment değeri kadar arttırır ve IDENTITY olarak tanımlanan bir sütun otomatik artışla değer aldığı için hiç bir zaman null olamaz.
Tablo alanlarımız yukarıdaki gibi olmalı.
ParentID : Kategorimizin bağlanacağı Üst Kategori ID' sidir, eğer 0 ise ana kategoridir.
Tablo Değerlerimi aşağıdaki gibi verdim
3.SQL Server Sorgulaması
► Tüm Kategorilerin Getirilmesi
Select * from TblKategori
► Bir alt kategorinin getirilmesi (Ör; Marmaradaki şehirler)
Select * from TblKategori where ParentID=2

with cte
as
(
select ID,KategoriAdi,ParentID, 0 AS level , ID as Visited
from TblKategori
where ParentID =2
union all
select TblKategori.ID,TblKategori.KategoriAdi,TblKategori.ParentID, level +1 ,
cte.ParentID
from TblKategori inner join cte
on TblKategori.ParentID=cte.ID
where Visited NOT LIKE ('%<'+convert(varchar(3),TblKategori.ParentID)+'>%')
)
select * from cte D1
4. Asp.net de TreeView ile Kullanımı
► 1.Adım Asp.Net Projesi oluşturuyoruz
►2.Adım Veritabanımızın bağlantı bilgilerini web config dosyasına ekliyoruz.
<connectionStrings>► 3.Adım Default.aspx sayfasına TreeView kontrolümüzü ekliyoruz
<add name="conn" connectionString="Data Source=192.168.0.3;initial catalog=DBKategori;uid=**;pwd=****;"
providerName="System.Data.SqlClient" />
</connectionStrings>

<asp:TreeView ID="TreeView1" runat="server" ImageSet="Arrows" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged">► 4.Adım Default.cs sayfasına kodlarımızı ekliyoruz
<HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
<Nodes>
<asp:TreeNode Text="Kategoriler" Value="0"></asp:TreeNode>
</Nodes>
<NodeStyle Font-Names="verdana" Font-Size="11pt" ForeColor="Black" HorizontalPadding="2px"
NodeSpacing="0px" VerticalPadding="0px" />
<ParentNodeStyle Font-Bold="False" />
<SelectedNodeStyle Font-Underline="False" ForeColor="#00cc66" HorizontalPadding="5px" VerticalPadding="0px" />
</asp:TreeView>
namespace SinirsizKategori
{
public partial class Default : System.Web.UI.Page
{
private SqlConnection baglanti;
private SqlDataAdapter komut;
DataTable dt;
protected void Page_Load(object sender, EventArgs e)
{
baglanti = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
komut = new SqlDataAdapter();
string _query = string.Format("select * from TblKategori");
SqlCommand sorgu = new SqlCommand();
DataSet ds = new DataSet();
try
{
if (baglanti.State == ConnectionState.Closed || baglanti.State == ConnectionState.Broken)
baglanti.Open();
sorgu.Connection = baglanti;
sorgu.CommandText = _query;
sorgu.ExecuteNonQuery();
komut.SelectCommand = sorgu;
komut.Fill(ds);
dt = ds.Tables[0];
}
catch { }
populateData(TreeView1.Nodes[0], getrows("0"));
}
DataRowCollection getrows(string id)
{
DataView dw = new DataView(dt);
dw.RowFilter = "ParentID=" + id;
return dw.ToTable().Rows;
}
void populateData(TreeNode node, DataRowCollection col)
{
foreach (DataRow row in col)
{
TreeNode n = new TreeNode();
n.Text = row[1].ToString();
n.Value = row[0].ToString();
node.ChildNodes.Add(n);
populateData(n, getrows(row[0].ToString()));
}
}
}
}
► Ve Projemizi Çalıştırıyoruz
OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" içerisinde komutları vermemişsiniz sanırım.
YanıtlaSilOnSelectedNodeChanged="TreeView1_SelectedNodeChanged" içerisinde komutları vermemişsiniz sanırım.
YanıtlaSil