DataGrid ile Sayfalama (Paging)
Önceki makalelerde DataGrid 'i basitçe gösterdim ve özelliklerinden bahsettim. DataGrid 'e nasıl stil verildiğini, tasarımımıza nasıl uydurabileceğimizi, hangi sütunların görünmesini ve başlıklarının ne olmasını istediğimizi nasıl belirteceğimizi anlattım. Ancak DataGrid 'in daha karmaşık işler için sunduğu destekleri makalelerime dahil etmedim.
DataGrid 'in sayfalama, sıralama, seçme, silme, düzenleme desteğinin olduğunu önceden söylemiştim. Bu makalede sayfalama konusunu işleyeceğiz. Sayfa numaralarını göstererek veya ileri-geri düğmeleriyle.. İki çeşidini de gösterip örnek kodlarını vereceğim. Lafı daha fazla uzatmadan konuya giriyorum..
İleri-Geri Sayfalama
Önceki DataGrid makalelerinde kullandığımız veritabanı dosyasını bu makalede de kullanacağız. Ancak konumuz sayfalama olduğu için daha çok kayıta ihtiyacımız var. Bu yüzden var olan kayıtları kopyalayarak kayıt sayısını 3 'e katlıyoruz.
İlk olarak kullanacağımız sayfalama yönteminde "Önceki Sayfa" ve "Sonraki Sayfa" görevlerini yapacak linklerimiz olacak. Dolayısıyla sayfalar arasında sadece ileri-geri hareket edebileceğiz.
DataGrid kontrolünün sayfalama yapması için AllowPaging özelliğinin değerinin True olması gerekir. Bu özelliğin değeri True olarak belirlenmişse ileri-geri düğmeleri veya sayfa numaraları otomatik olarak oluşturulur. Özelliğin varsayılan değeri False 'dur.
Hangi tür sayfalama kullanılacağı PagerStyle-Mode özelliği ile belirlenir. Bu özelliğin iki değeri vardır: NextPrev ve NumericPages. Varsayılan değer NextPrev 'dir ve programcı bir değer belirlemezse sayfalama NextPrev modunda yapılır.
PageSize özelliği ise sayfa boyutunu tutar. Bir sayfada kaç kayıt gösterilmek istendiği bu özellik ile belirtilir. OnPageIndexChanged özelliğine ise sayfayı değiştirmesi için yazılan sub 'ın ismi yazılır. Böylece sayfayı değiştirecek linke tıklandığında o sub tetiklenmiş olur.
Son olarak, PagerStyle-HorizontalAlign özelliği ile sayfa numarası veya ileri-geri linklerinin hücredeki yatay hizalaması belirlenir. Tahmin edeceğiniz gibi Left, Center ve Right değerlerinden birisi seçilebilir.
Şimdi NextPrev modunda bir sayfalama örneği görelim.
DataGrid kontrolü
Sub Page_Load(Source As Object, E As EventArgs)
if not IsPostBack then
DataGridDoldur()
end if
End Sub
Sub DataGridDoldur()
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 Sub
Sub SayfayiDegistir(s As Object, e As DataGridPageChangedEventArgs)
dgKisiler.CurrentPageIndex=e.NewPageIndex
DataGridDoldur()
End Sub
<asp:DataGrid id="dgKisiler" runat="server"
BorderColor="#C7C7C7"
BorderStyle="solid"
BorderWidth="1px"
CellSpacing="0"
CellPadding="3"
Font-Name="verdana"
Font-Size="11px"
AllowPaging="True"
PageSize="5"
PagerStyle-Mode="NextPrev"
PagerStyle-HorizontalAlign="Center"
OnPageIndexChanged="SayfayiDegistir"
/>
Önceki DataGrid örneklerinin kodlarını incelemiş olanlar bu koddaki değişiklikleri görmüşlerdir. Neleri değiştirdiğimizi görelim önce. DataGrid 'in içini doldurduğumuz kod bloğunu ayrı bir sub içine aldık. Çünkü bu kod bloğunu sayfayı değiştirmesi için yazdığımız sub 'dan da çağırmamız gerekiyor.
DataGrid 'de az önce bahsettiğimiz özelliklerin değerlerini belirledik. SayfayiDegistir isimli bir sub oluşturduk. DataGrid 'in OnPageIndexChanged özelliğine bu sub 'a verdiğimiz ismi yazdık.
İleri-geri linklerinden birisi tıklandığında SayfayiDegistir sub 'ı tetikleniyor. Bu tıklama ile sub 'a DataGridPageChangedEventArgs parametresi gönderiliyor. Bu parametreyi e isimli değişken ile alıyoruz. DataGrid 'in CurrentPageIndex özelliğine DataGridPageChangedEventArgs parametresinin NewPageIndex değerini atıyoruz.
Kullandığımız SQL cümlesinde hiçbir değişiklik olmamasına rağmen DataGrid kendi içerisinde sayfalamayı yapıyor. Biz sadece sayfa boyutunu belirleyip gerekli rutini oluşturuyoruz.
Sayfa Numaralarıyla Sayfalama
Bazen çok fazla kayıt olur veritabanında. Tüm kayıtları birden göstermek sadece kullanışsız olmakla kalmaz, internet trafiğine de yük olur. Düşünün o sayfayı günde 1000 kişinin çalıştırdığını.. Ayrıca o sayfayı görmeyi istemek hatasını yapan ziyaretçinin pişmanlığını..
Yukarıda anlattığımız tarzda sadece ileri-geri hareket edilebilen sayfalama yöntemleri ise çok fazla kayıt olduğu zaman kullanışsız olur. Sayfa ilk yüklendiğinde 1. sayfa gösterilir. Örneğin 10. sayfaya gitmek bu durumda çok zorlaşır.
Bu durumda imdadımıza yetişen ise sayfa numaralarıyla sayfalamadır. DataGrid ile bunu yapmak diğeri kadar kolaydır. Çünkü tek değiştirmemiz gereken PagerStyle-Mode özelliğinin değeridir. Bu özelliğin değerini NumericPages yaparak herşeyi değiştirebiliriz.
Bu örnekte sadece DataGrid 'in kodunu vermekle yetineceğim. Diğer kodlar aynen kalacak. Biraz önce dediğim değişikliği yapmanız yeterli olacak.
<asp:DataGrid id="dgKisiler" runat="server"
BorderColor="#C7C7C7"
BorderStyle="solid"
BorderWidth="1px"
CellSpacing="0"
CellPadding="3"
Font-Name="verdana"
Font-Size="11px"
AllowPaging="True"
PageSize="5"
PagerStyle-Mode="NumericPages"
PagerStyle-HorizontalAlign="Center"
OnPageIndexChanged="SayfayiDegistir"
/>
Sonuç
DataGrid sayfalama desteği verirken ve etiketleri arasında olmayı ister. Bu isteği yerine getirmezseniz hata alırsınız. Zaten sayfalama yapan DataGrid kodumuzun eski DataGrid kodlarından bir farkı da budur.
