Makale Özeti

Web Sayfalarımızda Drop Down box dan seçim çok zor oluyor eğer içindeki veri çok ise sayfa boyut olarak aşırı büyüyor. Peki Pageable bir Drop down nası olur ?

Makale

Drop-Down Grid Web Control Uygulaması

Aslında burada bahsedeceğim şey tam olarak Client-Side scriptlerle kontrol edilecek bir Web Control yazılımı. Nasıl en kolay ve hızlı şekilde yaparsınız ondan bahsetmek.. Örnek olarak da Drop-Down Grid yapacağız.

Gerekli Malzemeler:

  • System .web.ui.control inheritance ( Objemizin Temel Klası olacak)
  • INamingContainer ( Objemizin İsimlendirilme Kontrolünü sağlıcak)
  • System .Web.UI.IPostBackDataHandler ( Objemizin Postbackleri yakalamasını sağlıcak )

Malzeme listesinde ki en önemli obje IPostbackDataHandler, Neden mi? Form submitlerini yani meşhur __dopostBack Javascriptini Handle edebilmemiz için şart olan Interface bu..

Aslında bi de IPostBackEventHandler var ama.. o tüm postback leri yakaladığı için bizim işimizi görmez. Bize sadece bizim Kontrolümüzün postbacklerini handle edecek bişey lazım olduğu için IPostBackDataHandler kullandık.  IPostBackDataHandler implemente edilen klas da sadece klas için Oluşan uniqeID yani Render edilen html de classımız için verilen Id den bir postback varsa onu handle eder. Aksi takdirde bir handle işlemi olmaz.

Hazırlanışı:

Metin Kutusu:

<Assembly: ile başlayan Kısım Bizim ASPX sayfamızın Register TAG kısmında controlümüzü register etmemizi ve Html de kullanılacak olan tag prefixmizi belirmemizi sağlar. <Mel:DropdownGrid olarak Görünek demektir.

Ayrıca <defaultProperty ile naşlayan satır da bizim Controlümüz ASPx sayfaya sürüklendiğinde nası bir HTML formatta belirecek onu söyler

Standart Private değişkenlerimiz ..

Bir tane Datagrid Nesnemiz Eventleri ile handle edilmiş..

Birazdan detayına ineceğim Visual Studio .Net Editorde properties kısmında görünmesini istediğimiz Özelliklerimiz.

Bir Render Override

Class oluşturulduğunda  yapılacak ilk tanımlama işlemlerini  yapan New

DataGrid  ItemDatabound metodu ki. Bu metot ile Gridimizi oluşturup verilerimizi alacağız.

Class load edildiğinde çalışan ve Klas özeliklerinde  verilen değerleri gerekli objelere isleyen bir metot. New metodunda neden yapmıyoruz derseniz. Property lerdeki değerler ancak load metodunda set edilmiş oluyor.

Ve IPostBackDataHandler implementesi LoadPostData Metodu ki.. Bizim yapacağımız işlemleri handle edecektir.

Unutmadan birde.. Herhangi bir değer seçildiğinde ana sayfada işlem yapılabilmesini sağlıyacak bir de event  olacak ki değer seçildiğinde diğer klaslar bunu anlasın

Şimdi..

Yapılışına gelince…

İhtiyacımız belli. Bir Drop Down datagrid.

Ne yapacak ?

Bir datatable objesi içindeki veriyi  bize sayfa sayfa gösterip içinden bir tanesini seçmemizi sağlıcak ve seçildiğinde bazı şeyleri tetikliyecek. Belki efekt olsun diye altında gölge olacak… (ShowShadow,ShadowColor) Editbox,Buton ve Grid in  bir Class ı olacak şekl olsun diye. Grid içinde gösterilecek alanların listesi, hangi dataset alanı geri veri olarak dönderilecek?

Şimdilik bunlar olsun .. geri kalanı zaten Source Code içinde var . Açıklamaları ile.. ordan bakarınız..

Bu private tanımlamalardan sonra bunların property penceresinde görünmesi için bildirmemiz gerekli

Bunu nasıl tanımlarız…

Örneğin ShowShadow Boolean propertisi..

Defaultvalue Özellikler penceresinde görünecek default değer. Hangi catagoride olacağını ise Category kısmında veriyoruz.. Ne kategorisi derseniz, Hani property penceresi varya solda. Onu açtığınızda bi A dan z ye bide kategoriye göre özellik listeleme var .. işte onun için.

PersistenceMode ise HTML aktarıldığında nasıl görüneceğini  belirtiyor.. XML Attribute şeklinde istediğimiz için biz Attribute seçili.

DesignerSerializationVisibility ise değerin nesinin görüneceği, İçindeki değişkenler olacak mı ? yoksa sadece kendimi olacak ? yada hiç görünmücek mi. HTML tag içinde onu belirtir. Biz sadece Kendi değerinin görünmesini istiyoruz o yüzden visible olacak

Bundan sonra ise Sub New() var..

Ne olur burada,sadace Kullanıdığım DataGrid için Instance boyunca kullanılacak ve değişimine izin vermediğim özellikler tanımlanacak.

Sub OnLoad da ise, Asıl olarak değişkenlere istinaden verilmesi gereken değerler. Grid Datasource değeri ataması, kolonların tanımlanması, başlıklar olacak mı olmucak mı vs .. gibi tanımlamalar var .

Override Render da ise..

HTML olarak Kontrolümüzün görüntüsünü oluşturuyoruz

Bir tane <input type=”text  …. Bir tanede <Buton> objesi tanımlıyoruz..

Daha sonra  Bir tane Div .. ve div tag  içinde iken gridmizine rendercontrol metodu ile controlümüzün writer objesine yazdırıyoruz..


                                                                                                                             

Sonrasında ise IPostBackDataHandler ile gelen çağrıları yakalayıp istediğimiz işlemleri yapıyoruz..

Bitti.

Source Kodu