Bazen yaptıgımız sistemlerde sınırsız kategori sistenmine ihitiyaç duymakatayız . Birkaç yöntem kullanarak sınırsız kategori uygulamasını yapabiliriz.
Bunun için ilk önce veritabanımı oluşturmam gerekir ben mysql kullanarak oluşturuyorum tercih sizin.
DROP TABLE IF EXISTS `menuler`;
CREATE TABLE `menuler` (
`alt_id` int(10) unsigned NOT NULL auto_increment,
`ana_id` int(10) unsigned default NULL,
`menuadi` varchar(45) default NULL,
PRIMARY KEY (`alt_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin5;
Tablomuzu oluşturduktan sonra artık kodlama tarafına geçebiliriz.
Öncelik olarak design tarafımızda bir adet treeview oluşturuyoruz.
<asp:TreeView
ID="TreeView1"
ExpandDepth="0"
PopulateNodesFromClient="true"
ShowLines="true"
ShowExpandCollapse="true"
runat="server" />
Sonra code behind tarafına geçerek kodlarımızı yazmaya başlayabiliriz.
' baglantımı web.config dosyasından alıyorum
Dim cumle As String = ConfigurationManager.ConnectionStrings("localhost").ConnectionString
Dim baglanti As New OdbcConnection(cumle)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then ustdizinidoldur()
End Sub
Private Sub ustdizinidoldur()
' veritabanımıza baglanarak üstid si 0 olan üst kategorimizi çekliyoruz
Dim komut As New OdbcCommand("select alt_id,menuadi,(select count(*) FROM menuler " _
& "WHERE ana_id=sc.alt_id) altnodecount FROM menuler sc where ana_id=0", baglanti)
Dim da As New OdbcDataAdapter(komut)
Dim dt As New DataTable()
da.Fill(dt)
nodlaridoldur(dt, TreeView1.Nodes)
End Sub
Private Sub altdizinidoldur(ByVal ustid As Integer, ByVal parentNode As TreeNode)
' veritabanımıza baglanarak üstidye ait olan alt kategorilerimizi çekliyoruz
Dim komut As New OdbcCommand("select alt_id,menuadi,(select count(*) FROM menuler " _
& "WHERE ana_id=sc.alt_id) altnodecount FROM menuler sc where ana_id=?", baglanti)
komut.Parameters.AddWithValue("?", ustid)
Dim da As New OdbcDataAdapter(komut)
Dim dt As New DataTable()
da.Fill(dt)
nodlaridoldur(dt, parentNode.ChildNodes)
End Sub
Private Sub nodlaridoldur(ByVal dt As DataTable, ByVal nodes As TreeNodeCollection)
For Each dr As DataRow In dt.Rows
Dim tn As New TreeNode()
tn.Text = dr("menuadi").ToString()
tn.Value = dr("alt_id").ToString()
nodes.Add(tn)
'alt kategorileri dolduruyoruz
tn.PopulateOnDemand = (CInt(dr("altnodecount")) > 0)
Next
End Sub
Protected Sub TreeView1_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.TreeNodePopulate
altdizinidoldur(CInt(e.Node.Value), e.Node)
End Sub
Sınırsız kategori sistemimizide oluşturmuş olduk.
|