8 Şubat 2017 Çarşamba

DevExpress GridView Sık Kullanılan Olay, Özellik veya Yaşanılan Sorunlar -3 (EditForm- birbirine bağlı 2 lookupedit örneği)

  Devexpress'te GridView'in güzel özellliklerinden olan Express EditForm özelliği açıldığında bazı olaylar normal inplace edit işlemine göre farklı olabilmektedir.

Bu örneğimizde bir adres bilgisi yazıyoruz ve gridin bir hücresinde ülkeler lookupedit'i var diğer hücrede ise şehirler için bir lookupedit var. Eğer inplace edit işlemi kullanıyor isek  ülkeler lookupedit'in  EditValueChanged  özelliğinde  şehirler lookupedit'inin  datasource'unu  null olarak atarız.  Kullanıcı  şehirler sütununa focus olduğu sırada   gridview'ın  ShownEditor   methodu devreye girer ve bu method içinde seçilmiş ülke bilgisine göre  şehir bilgisini datasource olarak buradaki lookupedit'imize atarız. Ancak  EditMode  özelliğimiz   EditForm  olarak atanmış ise  ShownEditor veya grid sütununa atanmış columnedit'in  EditValueChanged methodları  tetiklenmez.. Bu durumu çözebilmek için  EditFormPrepared  olayında  bir  lookupedit'lere  kendimiz method ekleyeceğiz.  Burada methodlar daha önceden eklenmişse diye önce methodu  -=  ile kaldırıp sonra  +=  ile ekliyoruz.

Aslında işlem normal inplaceden çok faklı değil. Sadece ilgili editorlerin olaylarını EditForm hazırlanırken ekliyoruz.
  Burada normal lookupedit objelerimizden farklı olarak 2 adet lookupedit tanımluyoruz.
 EditFormPrepared methodunda  ülke sütununa ait olan edit objesini  _countryLookUp objemize  atıyoruz,
 şehirler sütununa ait olan lookupedit objesini ise _cityLookUp  objesine atıyoruz.  Eğer atama başarılı ve objeler null değil ise ,  contry lookup'a Leave olayını,  city lookup'ına  Enter olayını ekliyoruz.  Önce çıkarıp sonra ekleme yapmamızın sebebi bir sonraki seferde Editform açıldığında olay zaten ekli ise hata vermesin diye yapılmaktadır.

contry lookup  Leave olayında yani country  lookup'ından değer seçilip fokus başka kontrole kaydığı zaman, , contry looku'ı terkedildiğinde,  şehirler lookup'ını boşaltıryoruz.  (datasource=null)

citylookup'ı aktifleştirildiği, kullanıcı  city editörüne tıkladığında ise seçilmiş  ülkeyi ilgili sütundaki bilgiyi okuyarak öğreniyoruz ve şehirler lookup'ını buna göre filtreleyen methodu çağırıp bunu lookup'a datasource olarak atıyoruz.

  

Hiç yorum yok: