Skip to main content

AccessTr.neT


Treeview Kullanımı

Treeview Kullanımı

#1
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

.rar treewiev.rar (Dosya Boyutu: 85,2 KB | İndirme Sayısı: 427)
meşhur çin atasözü  "ACCESS İLE YAPABİLECEKLERİNİZ HAYAL EDEBİLECEKLERİNİZ İLE SINIRLIDIR" siz ne kadar hayal edebiliyorsunuz
Cevapla
#2
Emeğin ve paylaşımın için teşekkürler. Saygılar...
Bilgi paylaşıldıkça çoğalır....
Her engel, yaşam koşullarınızı daha iyileştirecek bir fırsattır.


Access için her zaman lazım olacak konu başlıkları listesi


Cevapla
#3
teşekkürler eşref hocam
Cevapla
#4
Paylaşımınız için teşekkürler sayın hocam
Eğer bir kişi hem akıllı, hem çalışkansa takdir et.
Çalışkan fakat akıllı değilse dikkat et.
Akıllı fakat tembel ise ikaz et.
Hem akılsız, hem tembelse uzaklaşmak için acele et.
Cevapla
#5
Eşref hocam teşekkürler...
İnadına, ille de Accesstr.net...
Cevapla
Tongue #6
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.
Son Düzenleme: 14/07/2009, 15:58, Düzenleyen: mehmeser.
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da