26 Mart 2014 Çarşamba

SQL Server Sınırsız Kategori ve ASP.NET TreeView ile Kullanımı

Merhabalar,

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
 

► Bir kategoriye ait alt kategorilerin tümü (Marmara'nın altındaki bütün kategoriler)



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>
    <add name="conn" connectionString="Data Source=192.168.0.3;initial catalog=DBKategori;uid=**;pwd=****;"
     providerName="System.Data.SqlClient" />
  </connectionStrings>
 ► 3.Adım Default.aspx sayfasına TreeView kontrolümüzü ekliyoruz 




   <asp:TreeView ID="TreeView1" runat="server" ImageSet="Arrows" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged">
                <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>
  ► 4.Adım Default.cs sayfasına kodlarımızı ekliyoruz









































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


2 yorum:

  1. OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" içerisinde komutları vermemişsiniz sanırım.

    YanıtlaSil
  2. OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" içerisinde komutları vermemişsiniz sanırım.

    YanıtlaSil