Makale Özeti

Bu makalede ASP.NET 2.0 ile birlikte gelen DetailsView kontrolünü ve bu kontrolün GridView kontrolü ile ortak kullanımı üzerine birtakım bilgiler edineceğiz. - Bölüm 2 -

Makale


ASP.NET 2.0 - DetailsView ve GridView - 2


Makalenin kapsadığı konular:
  1. DetailsView kontrolü
  2. DetailsView kontrolünün GridView kontrolüyle paralel şekilde kullanımı ile ilgili örnek

    Not: Bu makaledeki örnekler sırasında, ASP.NET 2.0 ile birlikte gelen yeni kontroller olan "GridView" ve "AccessDataSource" kontrolleri kullanılacaktır. Bu kontroller ile ilgili ayrıntılı bilgiyi, nasıl oluşturuldukları gibi konuları daha önce yazmış olduğum ASP.NET 2.0 - GridView ve AccessDataSource konulu makalede bulabilirsiniz. Bu makalede yeni birer GridView ve AccessDataSource kontrolleri oluşturulması aşaması takip edilecek fakat detaylarına girilmeyecektir.



Sıra geldi DetailsView kontrolümüzü oluşturmaya. Bunun için sayfamıza yeni bir "DetailsView" kontrolü sürüklüyoruz:





DetailsView kontrolümüzün ismini "dvAdresler", genişliğini de "400px" olarak değiştiriyorum:



Şimdi DetailsView kontrolümüzün ihtiyacı olduğu adres bilgilerini veritabanımızdan alıp getirecek olan AccessDataSource kontrolümüzü yine "Smart Tag" penceresindeki kısayolu aracılığı ile oluşturalım:



AccessDataSource kontrolümü "adsAdresler" olarak isimlendiriyorum:



Access veritabanımın yolunu gösteriyorum:







Bir sonraki adıma geçip "Select" SQL cümlemizi oluşturalım:



SQL cümlemizi oluşturduk. Senaryomuz gereği ihtiyacımız olan adresler seçmiş olduğumuz kişiye ait olan adresler olmalı. O halde "Where" ifademizi oluşturalım:





Daha önce iki tablo arasındaki ilişkinin "KisiID" alanına bağlı olarak kurulacağını söylemiştim. Bu sebeple "Column" değeri olarak "KisiID" alanını seçeceğim:





"Column" değerini seçtiğim anda "Operator" değeri de açıldı ve otomatik olarak "=" değeri verildi. Zaten ihtiyacımız olan durum bir eşitlik olduğu için bu değere dokunuyorum. Sıra geldi "Source" değerine. Bu değer üzerinde biraz ayrıntılı bilgi vermek istiyorum:

AccessDataSource, SqlDataSource gibi yeni DataSource kontrolleri içerisinde "UpdateParameters", "InsertParameters", "SelectParameters" ve "DeleteParameters" isimlerinde 4 adet parametre koleksiyonu bulunmaktadır. Bu parametreler sabit değerlere sahip olabileceği gibi bir kontrolün herhangi bir özelliğinin değerini, Session, Cookie, QueryString gibi çeşitli koleksiyonların içerisinde taşınan çeşitli değerlere de otomatik olarak erişebilirler.

DataSource kontrollerinin parametre değerlerine erişebilecekleri tanımlar tam olarak şu şekildedir:

  • None: Sabit bir değeri parametre değeri olarak verirsiniz.
     
  • Control: Belirli bir kontrolün, belirli bir özelliğini parametre değeri olarak verirsiniz. Örneğin "TextBox1" kontrolünün "Text" özelliği gibi.
     
  • Cookie: Çerezler içerisinde saklanan bir bilginin değerini parametre değer olarak verirsiniz.
     
  • Form: Herhangi bir form alanında tutulan değeri parametre değeri olarak verirsiniz.
     
  • Profile: ASP.NET 2.0 ile birlikte gelen "Profile" sisteminde tutulan bir değeri parametre değeri olarak verirsiniz.
     
  • QueryString: QueryString içerisinde tutulan bir değeri parametre değeri olarak verirsiniz.
     
  • Session: Session içerisinde saklanan bir bilginin değerini parametre değer olarak verirsiniz.
     
AccessDataSource kontrolünün parametre koleksiyonları ile ilgili kısa bir bilgiyi daha önce yazmış olduğum ASP.NET 2.0 - GridView ve AccessDataSource konulu makalede bulabilirsiniz.

Bizim örneğimizde kullanacağımız seçenek ise "Control" seçeneği olacaktır. "Control" olarak belirleyeceğimiz kontrol "GridView" tipindeki ve "gvKisiler" ismindeki, içerisinde kişilerin listelendiği GridView kontrolümüzdür.

GridView kontrolünün "SelectedValue" özelliği, GridView kontrolünde "DataKeyNames" özelliğinde "anahtar" olarak tanımlanmış alanın seçili satır için taşıdığı değer bize verecektir. Örneğin bizim tanımlamış olduğumuz "gvKisiler" ismindeki GridView kontrolünün "DataKeyNames" özelliği "KisiID" olarak AccessDataSource kontrolünün oluşturulması sırasında otomatik olarak tanımlanmıştır. Bu da demektir ki "gvKisiler" isimli GridView kontrolümüzün "SelectedValue" özelliği, bize seçili olan satırdaki kişinin sahip olduğu "KisiID" değerini döndürecektir.

Tüm bu açıklamalar sonucunda "Where" ifademizin tanımlamasına şu şekilde devam edebiliriz:



Zaten seçmiş olduğumuz kontrolün hangi özelliğinin kullanılacağı otomatik olarak seçildi:



Şimdi "Add" butonunu kullanarak bu ifadeyi ekliyoruz:





"OK" butonuna tıklayıp önceki ekrana geri dönüyorum:



Hepinizin gördüğü gibi SQL cümlem artık bir "Where" ifadesine sahip.

Şimdi bir sonraki ekrana, yani SQL cümlesini test edebileceğimiz ekrana geçiyorum:



Aranızda düşünenler olabilir; SQL cümlemiz için parametre tanımladık, o zaman bu cümleyi nasıl test edeceğiz?

Dilerseniz bunu "Test Query" butonuna tıklayarak hep birlikte görelim:



Daha önce de ASP.NET 2.0 ile ilgili makalelerimde kullandığım ve sizlerin de görmüş olduğunuz test ekranında, şimdiye kadar karşımıza hiç çıkmayan yeni bir ekran çıktı: "Parameter Values Editor". İşte bu ekran sayesinde, tanımlamış olduğumuz parametrelerimize, test amaçlı olarak değerler atayabiliyoruz.

Ben sadece örnek teşkil etmesi açısından "KisiID" parametresine "1" değerini vereceğim. Ancak tabi ki veritabanında hiç kayıt olmadığından kayıtların listelenmesini beklemiyorum:





Parametre değerimizi verdikten sonra sorgu başarı ile çalıştırıldı ve alan isimleri getirildi. Kayıt gelmeyeceğini zaten belirtmiştim.

"Finish" butonuna tıklayarak işlemimizi sonlandıralım ve sayfamıza bir göz atalım:



İlk "DetailsView" kontrolümüzü oluşturduk. Görünüş itibari ile DetailsView kontrolünü GridView kontrolünün dikey olanı gibi düşünebilirsiniz. Aslına bakarsanız bu doğru bir yaklaşım da olur. Ancak unutmamak gerekir ki, DetailsView kontrolü ile bir kerede birden fazla kayıt gösteremezsiniz. Tek şansınız sayfalama işlemini aktif hale getirip, kayıtlar arasında gezinmek olur. Sayfalama işlemini de senaryomuz dahilinde daha sonra göreceğiz.

Şimdi DetailsView kontrolü üzerinde görünmesinin anlamı olmayan sütunları gizleyelim. Ben "AdresID" ve "KisiID" sütunlarını gizleyeceğim:







"OK" butonuna tıklayıp sayfamıza tekrar bakalım:



Son olarak da yine "Auto Format" seçeneği ile DetailsView kontrolümüze daha güzel bir görünüş kazandıralım:



Ben "Professional" formatlamasını seçiyorum:



Sayfamıza geri dönelim:



Görsel ayarlarımızı yaptık.

Peki "Smart Tag" ekranında "Enable Editing", "Enable Deleting" gibi seçeneklerin yer almaması hiç dikkatinizi çekti mi?

Bu seçeneklere sahip değiliz çünkü görmenizi istedim ki, AccessDataSource kontrolünüzün oluşturulması sırasında "Generate INSERT, UPDATE, and DELETE statements" seçeneğini işaretlemedik. Yani DetailsView, GridView, DataList gibi yeni data kontrolleri sahip oldukları DataSource kontrolü "UpdateCommand", "DeleteCommand" ve "InsertCommand" özellikleri atanmamış ise, bu işlemlere izin vermiyorlar.


Şimdi bu seçeneklere de sahip olmak için AccessDataSource kontrolümüzü yeniden konfigüre edelim:



Zaten bundan sonraki tüm adımlar daha önce geçmiş olduğumuz adımlarla aynı:



Hatırlarsanız ekleme, silme, düzenleme SQL cümlelerimizi "Select" SQL cümlemizi oluşturduğumuz ekrandaki "Advanced" butonuna tıklayarak oluşturuyorduk:



Karşımıza çıkan ekrandan da ilk seçeneği işaretliyorduk:





"OK" butonuna tıklatıp, hemen ardından "Finish" butonuna tıklayarak AccessDataSource kontrolümüzün "UpdateCommand", "DeleteCommand" ve "InsertCommand" özelliklerinin oluşturulmasını sağlıyoruz.

Şimdi DetailsView kontrolümüzün "Smart Tag" penceresine tekrar göz atalım:



Makalenin devamı bölüm 3'te anlatılmaktadır.


Makale ile ilgili tüm soru ve sorunlarınızı http://sunali.com/blog/archive/2005/07/05/32.aspx adresinde yorum olarak sorabilirsiniz.

Coskun SUNALI
http://sunali.com