![]() | ||||||||||||
TreeView'da Veritabanıyla ve XML Dosyalarla Çalışma | 05.02.2008 20:03:00 | |||||||||||
| Kategori : ASP.NET Özet : Bu makalemizde site navigasyon kontrollerinden olan TreeView'ın verileri saklayış şeklini görüp, veritabanından veya XML dosyalardan okunan verileri bu kontrole nasıl aktarabileceğimizi inceleyeceğiz. | ||||||||||||
|
ASP.NET 2.0 ile birlikte gelen site navigasyonu kontrolleri ile site haritalarının kullanıcılara dinamik menülerle görüntülenmesi sağlanabilmekte ve daha profesyonel görünümler elde edilebilmektedir. Bu kontrollerden biri olan TreeView’da ağaç görünümünde menüler oluşturmamızı sağlamaktadır. Genellikle proje içerisinde XML tabanlı oluşturulan bir .sitemap dosyası ile birlikte kullanılır. Sitemap dosyaları gerek oluşturulması gerekse site navigasyon kontrolleri ile kolay ve uyumlu çalışması açısından biz yazılım geliştiricilere büyük kolaylıklar sağlamaktadır. Sitemap dosyası belirli standartlar dahilinde yazılmakta ve genellikle site içerisindeki linklerin hiyerarşik yapısını saklamaktadır. TreeView kontrolü site haritasını taşımak amacıyla kullanılabileceği gibi farklı içerikleri de ilişkisel şekilde kullanıcılara sunulmasını da sağlayabilecek bir yapıya sahiptir. Örneğin kendi hazırladığımız XML dokümanındaki verilerin süzülerek üst düğüm – alt düğüm ilişkisi ile bu kontrole yüklenmesini isteyebiliriz. Böyle bir durumda akla gelen soru TreeView kontrolünü farklı yapıdaki XML dosyaları ile nasıl konuşturabileceğimizdir. Makalemizin ilk kısmında bu sorunun çözümünü inceleyeceğiz. Site haritasının sitemap dosyasında saklanmasının bazı dezavantajları olduğunu da söyleyebiliriz. Zira XML tabanlı bir doküman olduğu için gerek yapısını çözümlemek gerekse güncellemeler yapmak sıkıntı doğurabilmektedir. Özellikle kategori-alt kategori yapısı geniş olan ve sıklıkla güncellenen sitelerde (örneğin alışveriş sitelerinde) verileri XML dokümanında saklamak yerine veritabanında saklamak daha sık tercih edilmektedir. Peki sitemizin haritasını veritabanındaki tablolarda saklıyorsak bu verileri TreeView kontrolünde nasıl görüntüleriz? Makalemizin ikinci kısmında da bu sorunun çözümünü adım adım inceleyeceğiz.
Dilerseniz bu iki işlemin detaylarını incelemeden önce TreeView kontrolünün yapısı hakkında önemli bir noktaya değinelim. TreeView kontrolü Nodes koleksiyonu içerisinde TreeNode tipiden nesneler saklayarak linklerin oluşturulmasını sağlar. Aslında sayfa çalıştırıldığında TreeView’da görünen tüm linkler birer TreeNode nesnesidir. TreeNode nesnesi de kendi içerisindeki ChildNodes koleksiyonu içerisinde yine kendi tipinden yani TreeNode nesneleri taşıyabildiği için iç içe linkler oluşturulabilmektedir. Sitemap dosyasını TreeView kontrolüne kaynak olarak gösterdiğimizde kullanılan SiteMapDataSource kontrolünün yapmış olduğu işlem .sitemap dosyasının içerisindeki yapıyı çözümlemek ve bunları TreeNode nesneleri olarak TreeView kontrolüne bağlamaktır. Aşağıdaki şekil TreeView kontrolüne bağlanan TreeNode’ların yapısını simgelemektedir.
TreeNode sınıfının (class) yapıcı metotları (constructor) aracılığı ile farklı şekilde nesneler oluşturulabilir. Burada oluşturulan nesneler TreeView kontrolündeki linkler olacağı için sayfa yüklendiğinde LinkButton veya HyperLink olarak getirilecektir. Dolayısıyla oluşturulan link ya aynı sayfa üzerinde postback işlemi yapacak ya da başka bir sayfaya link verecektir. Aşağıda bir TreeNode nesnesinin farklı oluşturulma şekilleri bulunmaktadır.
Bir TreeNode nesnesi ChildNodes koleksiyonunda kendi tipinden nesneler taşıyabilir ve bunlarda o nesnenin alt linklerini oluşturur. Oluşan ana menü de TreeView kontrolünün Nodes koleksiyonuna eklenerek menü içerisinde görüntülenmesi sağlanır. Aşağıda oluşturulan iki alt menü bir ana menüye bağlanmakta ve ana menüde TreeView kontrolüne bağlanmaktadır. Default.aspx
Default.aspx.cs
Sayfa çalıştırıldığında oluşan basit menü aşağıdaki şekilde görülmektedir.
Resim: Programatik şekilde oluşturulan TreeView kontrolü Bu şekilde menülerin TreeView içerisinde programatik olarak nasıl yerleştirileceğini görmüş olduk. Dilerseniz XML dosyadan ve veritabanında getirilen verileri nasıl TreeView’a aktarabileceğimizi inceleyelim
Bu noktadan sonra XMLDataSource kontrolü ile dosyayı TreeView'a bağlamamız ve gerekli ayarları yapmamız gerekecektir. TreeView kontrolünün DataBindings koleksiyonuna eklenecek TreeNodeBinding nesneleri ile bu işlemi gerçekleştirebiliriz. Bu işlemi programatik yollarla gerçekleştirebileceğimiz gibi dekleratif şekilde de yapabiliriz. Aşağıdaki kodlarda sayfamıza eklenen TreeView ve XmlDataSource kontrolleri ile TreeView'in DataBindings koleksiyonuna eklenen TreeNodeBindings nesneleri görülmektedir.
TreeNodeBinding tanımlamalarında bulunan DataMember özelliği XML'den okunacak etiket ismini, TextField ise görüntülenecek verinin bulunduğu niteliği belirlemektedir. Sayfa çalıştırıldığında okunan verilerin TreeView'a hiyerarşik şekilde doldurulduğu görülecektir. TreeView kontrolünün önemli özelliklerinden biri de listelenen linklere resim eklenebileceği gibi CheckBox gibi bir kontrolde eklenmesini sağlayabilmesidir. Yaptığımız örnekte belirli bir bölükte bulunan askerlerden bazılarının seçilmesi ve sayfa postback edildiğinde seçili elemanları okunması isteniliyorsa bu işlem kolay bir şekilde yapılabilir. Amaç askerlerin seçim işleminin yapılması olacağı için asker isimlerinin eklendiği TreeNodeBinding elementinin ShowCheckBox niteliği true olarak ayarlanırsa listelenen asker isimlerinin sol kısmına birer CheckBox kontrolü eklenecektir. Aşağıda bu değişikliğin nasıl yapılacağı, CheckBox'lar olmadan TreeView'in görünümü ve CheckBox kontrolleri eklendiğinde TreeView kontrolünün görünümü bulunmaktadır.
Bu şekilde TreeView kontrolünü kendi oluşturacağımız bir XML dosyası ile nasıl besleyebileceğimizi görmüş olduk. Burada kilit noktamız XmlDataSource kontrolü ile veri kaynağını belirlememiz ve TreeView'in DataBindings özelliğine ekleyeceğimiz TreeNodeBinding nesneleri ile XML dosyadaki hangi etiketleri ve nitelikleri süzeceğimizi belirlemektir. Son kısımda menümüzdeki asker isimlerine eklediğimiz CheckBox'ları seçim durumlarına göre bir liste elde etme işlemini de aşağıdaki kodlarda gördüğünüz şekilde gerçekleştirebiliriz. Öncelikli olarak sayfamızın HTML kısmında bir Button nesnesi ekleyerek bu butona tıklanması durumunda listedeki seçili elemanları ekrana yazdıralım.
Default.aspx.cs
Seçim işlemi yapıldıktan sonra aşağıdaki şekilde görüleceği gibi seçim listesini elde edebiliyoruz.
Resim: 1) Listeden seçim yapılması, 2) Seçilen askerlerin listesinin ve bağlı olduğu kısımların elde edilmesi
Makalemizin ilk kısımlarına dönecek olursak TreeView kontrolünün TreeNode nesnelerinde oluştuğundan bahsetmiştik. Programatik olarak TreeView'e düğümler (node) ekleyip, düğümler altına da alt düğümler (child node) oluşturarak menüler elde edebilmiştik. Bu noktadan sonra yapacağımız işlem döngüler içerisinde önce kategorilere erişmek ve kategori için TreeNode nesneleri oluşturmak. Oluşan kategori düğümüne alt kategorileri, alt kategorilere de kendilerine ait ürünlerin eklenmesini sağlamamız gerekiyor. Oluşan tüm kategori nesnelerini de TreeView'in Nodes koleksiyonuna ekleyecek olursak menümüzü oluşturabileceğiz. Default.aspx
Default.aspx.cs
Sayfayı çalıştırdığımızda veritabanındaki 3 tablodan getirilen verilerin hiyerarşik şekilde TreeView kontrolüne yüklendiğini görebiliriz. Aşağıdaki resimde sayfamızın çıktısını görebilirsiniz.
Resim: Veritabanından getirilen veriler TreeView kontrolüne yüklendi Görüldüğü gibi veritabanındaki kayıtları TreeView kontrolüne yükleme işlemi oldukça pratik halde gerçekleştirilebiliyor. Burada bizim için en önemli noktalardan biri tabii ki veritabanında saklanan kayıtların tablolarda ilişkisel bir şekilde saklanmasıdır. Bu tip bir işlemi yukarıdaki şekilde gerçekleştirebileceğimiz gibi kendi Kategori, AltKategori ve Urun sınıflarımızı oluşturup her bir sınıf içerisinde bir alt birimindeki nesnelere ait liste koleksiyonlarını taşıyarak ta gerçekleştirebilirdik. Bu makalemizde TreeView kontrolünün nesneleri taşıyış şekline değinerek XML veri kaynaklarından veya bir veritabanında okunan verileri TreeView kontrolüne nasıl aktarabileceğimizi inceledik. Sitemap dosyaları kullanmaksızın da TreeView kontrolünü etkin şekilde uygulamalarımızda kullanabiliriz. Burada anlatılan bir çok konu aslında bir diğer navigasyon kontrolü olan Menu kontrolü için de geçerli olduğunu söyleyebiliriz. Bir başka makalede görüşmek dileğiyle. Uğur UMUTLUOĞLU www.nedirtv.com www.umutluoglu.com | ||||||||||||
Yazgelistir.com | ||||||||||||