AccessTr.neT

Tam Versiyon: Treeview Kullanımı
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Sayfalar: 1 2 3
Genelde herkesin kullanmak istediği tablodan gelen verilerle treeview olduğu için öncelikle bu tür uygulamalarda kesinlikle bir üsteki nod ile onun altındaki nodun birbiri ile ilişliklendirilmesi gerekiyor.

Yani ekleyeceğim örnekten bahsedecek olursak:

Branş tablosundaki id alanı ile isim tablosundaki id alanı birleşik. Bu sebeple biz nodları alırken bu id'lere bakarak nodları alıyoruz.

Yani ilk kodumuz birinci nodu yaptı. Sosyalbilgiler bunun id'si 1 sonra alt nodu yapacak kodu çalıştırıyor ama burada neye dikkat ediyor: isim tablosundaki id alanı 1 olanları süzüyor ve onlardan sosyal bilgiler altına isimleri nod olarak ekliyor. Bunu yaparken de her nodda bu sefer hobi tablosunu açıyor ve ordaki verileri isimid alanına göre süzüyor ve kişinin hobilerini getiriyor. Sonuç şöyle bir şey oluyor:

Kod:
Sosyal Bilgiler

Ahmet
Kayak
Yüzme

Bu işlemi her kişide yineliyor. Ta ki sosyal bilgilere ait isimler bitene kadar. Sonra Türkçe'ye geçiyor ve onda da aynı işlemleri yapıyor.

Bu şekilde alt nodun alt nodu onun nodu onun nodu diyerek alt alta bir çok nod eklenebilir.

Bundan sonra kodlar üzerinde anlatalım. Öncelikle formunuza üzerine bir adet imagelist ekleyin. Bu bize treeviewde tıklayınca kapanınca görünecek icon lar için lazım olacak.

Ve tabii ki bir de treewiev ekleyeceksiniz. Tabloları tarif etmiyorum ancak isimleri ve hangi alanlar ile bağlandıklarını söyleceğim:

Kod:
brans tablosu id alanı
isim tablosu id alanı ile bağlı
hobi tablosu id alanı
isim tablosu isimid alanı ile bağlı

Şimdi de VBA'ya geçelim:

Kod:
Private Sub Form_Load()
TreeView1.Nodes.Clear

'Öncelikle burda treeviewi siliyoruz. Bu genellikle kişiye özel trreeviewler yapıldığında işe yarar. Yani formu kullanan kişiye özel bir treeview geliyorsa önceki kişiye ait treeview verilerini silmek için kullanılır. Neyse, biz yine de garanti olsun diye koyduk.

Call treeyap(TreeView1)

'Burda treeview yapan fonsiyonu çağırıyoruz ve treeviewimizn adını fonksiyona gönderiyoruz.
End Sub


Bu treeview yapan fonksiyon


Kod:
Private Sub treeyap(Tv)

'Burdaki Tv değişkeni biz çağırırken treeviewimizin ismini gönderdiğimiz değişken.

Dim imgList As Control
'Burda imagelist için bir control değişkeni yapıyoruz.

Set imgList = Me!ImageList0

Burda imagelist değişkenini set ederek bunun form üzerindeki imagelistimiz olduğunu söylüyoruz.

Tv.ImageList = imgList.Object
'Burda treeviewimizin yukarıda değişkene atadığımız imagelisti kullanmasını iconları ordan getirmesini söylüyoruz.

Dim Rst As DAO.Recordset, treekey As String
'Burda dao nesnesi yapıyoruz ki tabloda verileri getireceğiz. Ayrıca bir tereekey değişkeni yapıyoruz ki buna her bir farklı bir string veri atayarak nodların birbirine karışmasını engelleyeceğiz.

strSQL = "Select * FROM brans "
'Burda strSQL değişkenine sorgumuz yazdık ki bunu rst rcorset nesnesi ile açacağız.

Set Rst = CurrentDb.OpenRecordset(strSQL)
'İşte burda rst nesnesini set ederek bunun currentdb yani içinde bulunduğumuz veritabanında bir tablonun brans tablosunun sorgu ile açılmasını istiyoruz.

While Rst.EOF = False
'Açılan tablonun yukardan aşağı doğru birer birer gidileceğini belirtiyoruz.

treekey = "PA" & Rst("bransi")
'İşte burda nodlarda kullanacağımız ve her nodu diğerinden ayıracak keyi üretiyoruz bunu tablodaki brans alanındaki verinin önüne PA kelimesi koyarak yapıyoruz.

Tv.Nodes.Add(, , treekey, Rst("bransi"), 1, 2).Expanded = False
'Burada treeviewimize nodları eklemesini söylüyoruz. Nasıl her kayıtta bir nod yani sosyal bilgileri yerleştirmesini istediysek treekey alanına da bizim yukarıda belirlediğimiz PASosyal Bilgiler olacak şekilde eklemesini sağlayacağız. Ayrıca burada gördüğünüz 1,2 rakamı imagelistteki 1 birinci icon 2 ise alt nod açıldıktan sora görünecek icon. Şayet sadece 1 olsa idi direkt her nodun önüne birinci icon gelecekti ve tıkladıktan sonrada aynı icon kalacaktı.

alttreeyap Rst("id"), treekey
'Burada yaptığımız her nodun altına yapacağımız nodu getiriyoruz. Yani sosyal bilgilerin altına branşı sosyal bilgiler olan kişileri getiriyoruz. Burada dikkat edilmesi gereken nokta; rst("id") ile biz alt nodu alacağımız isim tablosunu süzeceğiz, treekey ile de isim tablosundan getirdiğimiz isimlerin bu nodun alt nodu olduğunu belirteceğiz...

Rst.MoveNext
'Burada sosyal bilgileri yerleştirdikten sonra diğer kayda yani Türkçe'ye geç diyoruz. Ondan sonra da matematiğe ve sonraki kayıt sonraki kayıt..... diye devam ediyor...

Wend
'Burada while döngümüzü kayıtlar bitince bitiriyoruz.

Rst.Close
'Burada da rst ye atadığımız tabloyu kapatıyoruz

Set Rst = Nothing
End Sub



Kod:
Function alttreeyap(alttreeidsi As Integer, altid As String)
Dim Rst As DAO.Recordset, altreeid As String
'Bu da bizim üst nodlara alacağımız alt nodları yapma fonksiyonu. Kod hemen hemen üstteki kod ile aynı. Burada sadece isimler tablosunu açıyoruz. Burada alttreeidsi As Integer, altid As String diye sayı ve string alanı belirledik ve onlara bu fonksiyonda kullanmak üzere değerler atadık.

Set Rst = CurrentDb.OpenRecordset("Select * From isim where id=" & alttreeidsi)
'İşte burada yukarıdaki fonksiyondan aldığımız brans tablosundaki kaydın id ile isim tablosunu süzdürüyoruz ki bize sadece yukarıdaki fonksiyonda hangi bransı nod olarak ekledi ise ona ait idye göre biz o nodun altına imleri ekleyelim

While Rst.EOF = False

altreeid = "H1" & Rst("adısoyadi")
'Burada da bu nodlarda kullanmak üzere bir key alanı belirliyoruz.

TreeView1.Nodes.Add(altid, 4, altreeid, Rst("adısoyadi"), 3).Expanded = False
'İşte burada altid ile aldığımız üst nodun keyini buna alt key olarak ekliyoruz ki bunun sosyal bilgilerin alt nodu olduğu bilinsin altreeid ise bu nodun farklı bir nod olduğunu diğerleri ile karışmasını engelleyecek ve bize bu nodada bir alt nod ekleyeceksek o zaman işe yarayacak ki biz zaten bu nodada hobi nodu ekleceğiz. Ha buradaki 3 imagelisteki üçüncü icon ayrıca buradaki expand ise bu nodun açık mı kapalı mı olacağını gösterir. True ise açık False ise kapalıdır.

alttreenintreesiyap Rst("isimid"), altreeid
'Burada ise bu alt nod un alt nodunu yapacak alt nodu çağırıyoruz tabi hobi tablosunu isimid alanına göre süzerek getirmesi için buradaki her kayıtta rst("isimid") atamasını ve ayrıca yapılacak altnodun bu altnodun altnodu olduğunu belirtmek içinde altreeid alanını oraya gönderiyoruz

Rst.MoveNext
Wend
Rst.Close
Set Rst = Nothing
End Function



Aşağıdaki de altnodun alt nodunu yapmak için gerekli kod. Gerçi siz buna gerek görmezseniz silebilirsiniz yada bir alt nod daha ekleyecekseniz bu koddan bir kopya daha yapıp bu kod içinde çağırabilirsiniz. Bu fonksiyonu anlatmayacağım çünkü yukarıdaki fonksiyonlarla aynı...

Kod:
Function alttreenintreesiyap(alttreeidsi As Integer, altid As String)
Dim Rst As DAO.Recordset, altreeid As String
Set Rst = CurrentDb.OpenRecordset("Select * From hobi where id=" & alttreeidsi)
While Rst.EOF = False
altreeid = "H1" & Rst("hobiadi")
TreeView1.Nodes.Add(altid, 4, altreeid, Rst("hobiadi"), 3).Expanded = False
Rst.MoveNext
Wend
Rst.Close
Set Rst = Nothing
End Function


Örnek ektedir


Bu da kodun açıklamasız hali:

Kod:
Private Sub Form_Load()
TreeView1.Nodes.Clear
Call treeyap(TreeView1)
End Sub
Private Sub treeyap(Tv)
Dim imgList As Control
Set imgList = Me!ImageList0
Tv.ImageList = imgList.Object
Dim Rst As DAO.Recordset, treekey As String
strSQL = "Select * FROM brans "
Set Rst = CurrentDb.OpenRecordset(strSQL)
While Rst.EOF = False
treekey = "PA" & Rst("bransi")
Tv.Nodes.Add(, , treekey, Rst("bransi"), 1, 2).Expanded = False
alttreeyap Rst("id"), treekey
Rst.MoveNext
Wend
Rst.Close
Set Rst = Nothing
End Sub

Function alttreeyap(alttreeidsi As Integer, altid As String)
Dim Rst As DAO.Recordset, altreeid As String
Set Rst = CurrentDb.OpenRecordset("Select * From isim where id=" & alttreeidsi)
While Rst.EOF = False
altreeid = "H1" & Rst("adısoyadi")
TreeView1.Nodes.Add(altid, 4, altreeid, Rst("adısoyadi"), 3).Expanded = False
alttreenintreesiyap Rst("isimid"), altreeid
Rst.MoveNext
Wend
Rst.Close
Set Rst = Nothing
End Function


Function alttreenintreesiyap(alttreeidsi As Integer, altid As String)
Dim Rst As DAO.Recordset, altreeid As String
Set Rst = CurrentDb.OpenRecordset("Select * From hobi where id=" & alttreeidsi)
While Rst.EOF = False
altreeid = "H1" & Rst("hobiadi")
TreeView1.Nodes.Add(altid, 4, altreeid, Rst("hobiadi"), 3).Expanded = False
Rst.MoveNext
Wend
Rst.Close
Set Rst = Nothing
End Function
Emeğin ve paylaşımın için teşekkürler. Saygılar...
teşekkürler eşref hocam
Paylaşımınız için teşekkürler sayın hocam
Eşref hocam teşekkürler...
Merhaba,

Örneklendirdiğiniz için teşekkürler. Her ne kadar kodlarla treeview'e tabloyu aktarmış olsak da işin düzenleme ve ekleme kısmı hala sular altında Eşref Bey. Malasef bizler de çözemeyecek durumdayız bu konuyu.

Windows Registry'de olduğu gibi dallara sağ tıklayıp veri ekleyebileceğim ya da düzenleyeceğim günlerin hayalini kurarım. Hem treeview'e sağ tıklama ile hemde onun yanında bulunacak denetimlerde içeriği değiştirebilmek, seçili noda göre ekleme yapabilmek güzel olacaktı. Şöyle bir treviewden bir kayda geçince denetimdeki kayıt da onun ayrıntılarını gösterecek, istersek değiştireceğiz istersek seçili konuma ana ya da alt birim ekleyebileceğimiz bir form arayüzü.

Teşekkürler.
Sayfalar: 1 2 3