23 Nisan 2009 Perşembe

ListBox, DataSource ve ValueMember üzerine birkaç satır bilgi ...

Bir Windows uygulamasındaki ListBox içerisine üyeleri value ile birlikte eklemek istiyoruz. ListBox içerisindeki Items kolleksiyonunun Add methodunu kullanarak istediğimiz üyeyi içeriye ekleyebiliriz. Add methodu Object tipinden parametre aldığı için istediğimiz her nesneyi içeriye eklememiz mümkündür. Remove methodu ile de istediğimiz üyeyi kolleksiyondan ayırabiliriz fakat bu senaryoda Value kullanmak mümkün değildir.
Value elde etmek için ListBox'a bir DataSource verip, ValueMember Property'sine de bir kolon adı verebiliriz. Fakat, bunu yaptığımızda ListBox'a bir DataSource bağlıyken, artık ListBox'ın Add ve Remove methodlarını kullanamayız. DataSource üzerinde ekleme ve silme işlemleri yapmamız gerekir.
ListBox'a, DataSource bağlamadan nasıl Value eklenebilir?
Daha önce yukarıda da belirttiğim gibi ListBox'ın Items kolleksiyonu object tipinden parametre alarak çalışır. Eğer amacımız ListBox içerisinde görüntülenen üye dışında başka bir değer daha taşımak ise nesnemizin sadece adını değil komple kendisini içeriye ekleyebiliriz. Bu durumda görüntüleme işlemi için nesnemizin ToString methoduna çağrı gelir ve oradan dönen cevap ListBox içerisinde görüntülenir. ListBox içerisindeki Items kolleksiyonunda nesnemizin tamamı durduğundan dolayı istediğimiz anda ListBox'ın içerisindeki üyelerden birine erişip, üyeyi doğru tipe (cast) ederek nesnemizin tüm özelliklerine/değerlerine ulaşabiliriz.

2 yorum:

Unknown dedi ki...

merhaba.yapmak istediğim şey şu.bir listbox ım var db tablomu buna bağladım displaymember kayıt adı valuemember id olarak ayarladım.Listbox içinde kayıt arıyorum.Bulunan kayıt seçiliyor ve bütün bilgileri textboxlarda gösteriliyor.Kayıt bilgilerinde değişiklik yapıp değiştir butonuna basıyorum değiştiriyor.Buraya kadar sorun yok.Fakat aynı şekilde textboxlara getirttiğim kayıdı sil butonuna bastığımda hata veriyor.Hata da "Satır üzerinden silinen satır bilgilerine erişilemez." İçinden çıkamadım.Lütfen bir yardım edin..Teşekkürler.

Ercan Bozkurt dedi ki...

2 yıl önce sorulmuş bu sorunun yeni farkına vardım. Daha sonra da aynı sorunun sorulabileceğini düşünerek , gecikmeli olarak yanıtlıyorum. :D

Kontrole data source bağlandığı için silinecek kaydın da data source üzerinden silinmesi gerekiyor.