| Editor Login | Register | ||
| > Akademik İnternet ® > ASP.NET |
|
|
| GridViewdaki Kayıtları Okumak ve Metin Dosyasına Aktarmak | |||||
| ASP.NET 2.0 ile gelen yeni veri kontrollerinden GridView web uygulamalarında kullandığımız en zengin veri kontrolüdür. Bir programcının birçok ihtiyacını karşılayabilecek gelişmiş özelliklere sahip olan bu kontrolle tek satır kod yazmadan dahi veriye bağlanabilmekte, getirilen verileri sayfalayıp sıralayabilmekte, hatta yine kod yazmadan otomatik güncelleme ve silme işlemlerini de gerçekleştirebilmekteyiz. Bu kontrol ile ilgili olarak programcıya düşen görev ise kontrolün varolmayan özelliklerini çalıştırabilecek işlemleri yapmak kalıyor. Bu işlemlerden birisi de GridView"deki verilerin farklı bir ortama aktarılması olacaktır. Farklı ortamdan kastımız farklı bir tabloya, farklı bir nesneye veya bir dosyaya olabilir. Bu makalemizde GridView kontrolünde bulunan verilere programatik yollarla nasıl erişebileceğimize ve bu verileri txt uzantılı olarak bir metin dosyasına nasıl dönüştürebileceğimizi göreceğiz. GridView veriyi tutuş şekli açısından DataTable nesnesinde benzetilebilir. GridView"da saklanan kayıtlar satırlar ve sütunlar halinde tutulmaktadır. Gridview"deki satırlar GridViewRow, sütunlarda DataControlField tipinden birer nesne olarak saklanır. Satırlara Rows kolleksiyonundan(collection), sütunlara ise Colums kolleksiyonunda erişebilmekteyiz. Bir satırda bulunan bir sütunun değerine elde etmek için ise GridViewRow nesnesinin Cells kolleksiyonunu kullanarak ilgili hücredeki bilgilere erişebiliriz. Aslında ASP.NET"te dosya download işlemini biliyorsak, bu bilgiler bile bizim bir gridview içerisindeki kayıtları metinsel bir dosyaya aktarmamız için yeterli olacaktır. Kolleksiyonu ve kolleksiyonda saklanan verinin tipini bildiğimize göre bir foreach döngüsü içerisinde bu değerlere erişebilmemiz mümkündür. Bir sayfaya ekleyeceğimiz GridView"a gvUrunler adını verip, gerekli ayarlamaları yapıp bir SqlDataSource kontrolüne bağlayalım. Yapacağım örnekte AdventureWorks veritabanında yer alan Production.Product tablosunu kullanacağım(Sorgu: SELECT ProductID, Name, Color, ListPrice, ModifiedDate FROM Production.Product). Sayfaya eklenen bir buton kontrolünün Click event"inde grid kontrolünün içerisindeki verilere aşağıdaki örnek kodlar ile erişebiliriz. Kodlara bakılacak olursa; bir foreach döngüsü ile griddeki satırlar içerisinde adım adım ilerlenmiş ve elde edilen satırın Cells kolleksiyonundan 1 numaralı indeksteki değeri istenilmiş(yani Name sütunu).
![]() Şekil: Butona tıklandığında o an gridviewde bulunan satırların Name alanları sayfaya yazdırıldı Buradaki okuma işlemi belirli bir hücre üzerinden gerçekleştirildi. Eğer tüm hücreleri okumak istersek sütun sayısını bilmek ve ona göre de foreach döngüsünün içerisine bir for döngüsü açmak gerekecektir. Gridviewdaki sütunlar Columns kolleksiyonunda saklandığı için bu kolleksiyonun Count özelliği bize toplam sütun sayısını getirecektir. Aşağıdaki kodlar ile de griddeki tüm ve satırların tüm hücrelerini okuyabiliriz.
![]() Şekil: Gridviewdaki o an bulunan bütün veriler getirildi Gridview"ın Rows kolleksiyonu, sadece sayfa çalıştırıldığı anda görüntülenen kayıtları içerisinde saklayacaktır. Eğer grid kontrolünü sayfalandırılmış şekilde kullanıyorsak ve birden fazla sayfada veriler tutuluyorsa yukarıdaki kodlar çalıştırıldığında sadece o an üretilen sayfada grid içerisine hangi satırlar geliyorsa o satırların bilgilerine erişebiliriz. Eğer amacımız griddeki bilgileri bir dosyaya aktarmak ise olaya farklı yaklaşımlarımız olabilir. Sadece o an gridde görüntülenen satırları dosyaya kaydetmek isteyebileceğimiz gibi, belirli sayıdaki satırı veya gride bağlanan tüm kayıtlarıda dosyaya kaydetmek isteyebiliriz. Dilerseniz gridviewdaki kayıtları metinsel bir dosyaya kaydetme işlemini gerçekleştiren ve bu üç farklı durumu gözönüne alan küçük bir uygulama yazalım. Sayfaya ekleyeceğimiz gridview kontrolünü bir SqlDataSuorce kontrolüne bağlayalım. Sorgu olarak yukarıdaki sorguyu aynen kullanabiliriz. Yine Update,Delete işlemleri içinde gerekli sorguları oluşturalım. Burada her ne kadar Update-Delete işlemi yapmayacak olsakta gride eklenecek Update-Delete butonlarının metinsel dosyamıza eklenmesini de nasıl engelleyebileceğimizi ele alacağız. GridView dışında sayfaya bir RadioButtonList kontrolü ve bir de Button kontrolü ekleyelim. RadioButtonList kontrolü ile sadece bu sayfadaki verileri kaydetme, ilk 50 veriyi kaydetme ve tüm verileri kaydetme seçeneklerini ele alacağız. Sayfamızın tasarımı ve kodları aşağıdaki gibi olacaktır. ![]() Şekil: Oluşturduğumuz sayfanın Design kısmı
Sayfanın tasarımını ve gridviewa bağlanacak verinin ayarlanmasından sonra adım adım yapılacak işlemleri kodlamaya başlayalım. Öncelikli olarak gridde bulunan Edit ve Delete butonlarının oluşturulacak txt dosyasında bulunmasını istemeyeceğimiz için bu link butonlarını yazdırma işleminde çıkarmamız gerekecek. Update ve Delete gibi komut çalıştıran butonlar gridview içerisinde CommandField olarak tutulduğu için gridviewdaki CommandField kısmını programatik olarak gridden çıkarmamız yeterli olacaktır. Bu işlemi gerçekleştirmek için GereksizKolonlariSil adında bir metot yazalım. Bu işlemin ardından da kullanıcının radiobuttonlistten işaretleyeceği seçeneğe göre gridden farklı sayıda veri okunacağı için bu kısmı çözümleyelim. Burada; - Sadece bu kayıtlar seçeneğini seçilirse direkt olarak grid içerisindeki satırları okuma ve download işlemi yaptırmamız gerekecek. - İlk 50 kayıt seçeneği seçilirse grid kontrolünün PageSize özelliğini 50 yapmak gerekecek. Yine ilk 50 kaydın getirilebilmesi için de PageIndex özelliğinin 0 olarak ayarlanması gerekecek. Ardından grid kontolünün DataBind metodunu çağıracak olursak ilk sayfaya gidilecek ve ilk 50 kayıt yüklenecektir. Böylece ilk 50 kaydın txt formatında download edilmesini sağlayabileceğiz. - Tüm kayıtlar seçeneği seçilirse gridview kontrolünün AllowPaging özelliğini false yapmamız ardından DataBind metodunu çağırmamız gerekecek. Böylece yapılacak postback işleminin sonucunda gridde sayfalama yapılmayacağı için tüm kayıtlar yüklenecek, dolayısıyla da download işleminde tüm kayıtlar dosyaya yazdırılabilecek. Sayfaya eklediğimiz butonun click eventine aşağıdaki kodlar eklendiğinde grid kontrolündeki verileri istenilen şekilde download işlemine hazırlamış oluruz. Kodların en alt kısmında da az sonra yazacağımız ve metinsel dosyaya kaydetme işlemini üstlenecek olan metodu çağırıyoruz.
Bu şekilde gridview kontrolünün içeriğini yazdırılacak hale geldik. Butona tıklandığında postback işlemi gerçekleşeceği için gridview kontrolünü yeniden düzenliyoruz; fakat az sonraki yapılacak işlemlerde postback sonrası dosya download edileceği için sayfa yenilenmeyecektir, dolayısıyla da bizim design kısmında yaptığımız ayarlamalar geçerli kalacaktır. Aşağıdaki kodlarda da grid içerisindeki verileri metinsel dosyaya kaydetme işlemini üstlenecek TextKaydet metodu bulunmaktadır.
![]() Şekil: Sayfayı çalıştırdığımızda işaretlediğimiz seçeneğe göre txt uzantılı dosyayı bilgisayarımıza indirebiliriz Böylece gridview içerisindeki kayıtları okuma işlemini gerçekleştirerek alınan bilgileri txt uzantılı olarak metinsel bir dosya içerisinde sunmuş olduk. Özellikle basit anlamda kullanıcı arayüzlerinde yapılan listeleme ve raporlama işlemlerinde işimizi görebilecek tarzda küçük bir web uygulaması geliştirmiş olduk. Benzer yollarla okunan verileri başka bir kaynağa (farklı bir sunucudaki tabloya veya bir Excel dosyasına gibi) aktarabiliriz. Bir başka makalede görüşmek dileğiyle. |
|
| Bağlantılar: bilgininefendisi.net |
| Open Source Document Project | AUP&TOS |