Datagrid
Üyelik sistemi ile çalışan bir sitede, klasik ASP ve ADO'nun sunduklarını kullanarak,
tüm üyelerin listesini veren bir sayfa hazırlamak çok zaman alır. Bu iş için, belli
sayıda kayıtın veritabanından alınıp, belirlenmiş bir formatta gösterilmesi gerekir.
Veritabanında kayıtlı olan üye sayısının, web programcısının belirlediği sayfa boyutuna
göre kaç sayfada gösterilmesi gerektiği hesaplanır.
Ziyaretçinin seçtiği sayfaya denk gelen aralıktaki kayıtlar yine aynı formatla görüntülenir.
Tablonun kolay okunabilir olması açısından her kayıta ait hücre veya satırın rengi
değişik olabilir. Örneğin; hücre veya satırın arka plan rengi birinci kayıtta açık
mavi, ikinci kayıtta daha açık mavi olur. Üçüncü kayıtta ise yeniden açık mavi kullanılır.
İki değerli bu döngü gösterilecek olan tüm kayıtlar için tekrarlanır.
Yine aynı mantıkla, ziyaretçinin tabloyu daha kolay okuyabilmesi ve sayfanın daha
güzel görünmesi için başka ayrıntılara da girilebilir. Ancak klasik ASP ve ADO bunları
yapmak için programcıya ekstra kolaylık sağlamaz. Programcı, türlü algoritmalar
kurup uzun bir kod yazar. Daldan dala atlayan, bazen de takla atan bir kod çıkar
ortaya..
DataGrid Web Kontrolü
Çok geniş bir kaynak olan web kontrolleri, statik veya dinamik çalışabilen, programatik olarak ulaşıp değeri değiştirilebilen, hatta yine programatik olarak oluşturulabilen HTML'dekine benzer input kontrollerinin yanında, gelişmiş kontrolleri (Rich Web Controls) de içerir.DataGrid, DataList ve DataRepeater, veri kaynağından çekilen veriyi belirlenen formatta görüntüleyen gelişmiş web kontrolleridir. DataGrid ise bu ailenin en güçlü üyesidir.
ASP.NET'ten önce sadece Visual Basic gibi görsel programlama ortamlarında kullanılabilen DataGrid, .NET ile birlikte web programcısının da kullanabileceği bir şekle büründü. DataGrid kontrolü, veri kaynağındaki alanları bir tablonun sütunları olarak gösterir. Veri kaynağından çekilen her kayıt, tabloda bir satırda gösterilir.
Veriyi çok basit bir şekilde tabloya dökebilen DataGrid kontrolü, klasik ASP'de farklı algoritmalar kurarak uzun kodların yazılmasıyla yapılabilen sayfalama (paging) işlemini de yapabilme yeteneğine sahiptir.
DataGrid, sayfalama desteğinin yanında sıralama (sorting), seçme (selecting), düzenleme (editing) ve silme (deleting) işlemlerine de destek verir. Böylece bu kontrolü kullanarak basit bir yönetici paneli oluşturmak çok kolaydır.
AutoGenerateColumns özelliğinin değerini False olarak belirleyerek, veri kaynağındaki tüm alanların görüntülenmesi engellenebilir. Sütun başlığı olarak veri kaynağındaki alanların isminin değil, bizim belirleyeceğimiz değerlerin kullanılması sağlanabilir.
Şimdi ayrıntısına girmeden basit bir DataGrid örneği vereceğim. Veri kaynağı olarak kullanacağım Microsoft Access veritabanına ADO.NET ile bağlanacağım. Veritabanındaki tek tablonun tüm kayıtlarının DataGrid ile tabloya dökülmesini sağlayacağım.
Örnek DataGrid kullanımı
DataGrid kontrolünü kullanmak için <asp:DataGrid id="DataGrid1" runat="server"/> kodu kullanılır. Bu kısacık kod, çalıştırıldığında server tarafından HTML tabloya dönüştürülür. Veri kaynağındaki her kayıt DataGrid'deki bir satıra denk gelir. Veri kaynağındaki alanların isimleri, DataGrid'in sayfaya bastığı tablonun sütunlarının başlığı olarak görüntülenir.Böylece veri kaynağına bağlanmak ve çekilen veriyi bir Dataset'e aldıktan sonra bu DataSet'i DataGrid ''e yüklemek (DataBind) yeterli olur. Alanların isimlerini bilmeye gerek yoktur. Tablonun HTML kodunu programcı yerine sunucu yazar.
DataGridOrnegi1.aspx
|
<%@ Page Language="VB" Debug="True" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %> <html><head><title> DataGrid kontrolü </title></head><body> <script runat="server"> Sub Page_Load(Source As Object, E As EventArgs) If Not IsPostBack Then Dim connstr, sql As String connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("kisiler.mdb") + "" sql = "SELECT * FROM kisiler" Dim conn As New OleDbConnection(connstr) conn.open() Dim adapter As New OleDbDataAdapter(sql,conn) Dim ds As New DataSet() adapter.Fill(ds,"kisiler_tablosu") dgKisiler.DataSource = ds.Tables("kisiler_tablosu") dgKisiler.DataBind() conn.close() End If End Sub </script> <asp:DataGrid id="dgKisiler" runat="server"/> </body> </html> |
DataGridOrnegi1.aspx

Kullandığımız koda kısaca bakalım. Sayfanın başında, ADO.NET kullanacağımız için System.Data ve System.Data.OleDb aduzaylarını kodumuza dahil ettik. Page_Load olayı içerisinde, ilk olarak bağlantı cümlesini ve sql cümlesini oluşturduk. New() yapılandırıcısı (constructor) ile conn isminde bir OleDbConnection nesnesi oluşturduk ve bağlantı cümlesini parametre olarak kullandık.
Ardından yine New() yapılandırıcısı ile adapter isminde bir OleDbDataAdapter nesnesi oluştururken sql cümlesini ve az önce oluşturduğumuz OleDbConnection nesnesini parametre olarak kullandık. Bu işlemden sonra New() yapılandırıcısı ile bir Dataset nesnesi oluşturup, OleDbDataAdapter nesnesinin Fill metodunu kullanarak bu Dataset nesnesindeki ismini kendimiz belirlediğimiz "kisiler_tablosu" isimli tabloya sorgu sonucu dönen veriyi doldurduk.
Veri kaynağındaki tablo ismi ile Dataset nesnesindeki tablonun isminin aynı olması gerekmez.
Son olarak, dgKisiler isimli DataGrid kontrolünün DataSource özelliğine, Dataset nesnesinin "kisiler_tablosu" isimli tablosunu gösterdik. Ardından yine DataGrid kontrolünün DataBind() metodunu çalıştırıp Page_Load sub'ını kapatmadan OleDbConnection nesnemizin close() metodu ile veritabanı bağlantısını sonlandırdık.
