ASP.NET ile Verileri Sayfalamak


Merhabalar,
Bu yazımda sizlere veritabanından çekilen birden fazla kaydın nasıl sayfalanacağını anlatmaya çalışacağım. Eğer zşyaretçimiz sitemizden bir liste almak istiyor ve bu listede pek çok kaydı listeleyeceksek sayfamız aşağıya doğru uzayıp gidecektir. pek çoğumuz da bunun sayfanın tasarımı çirkinleştirdiğini düşünür ve istenilen listenin sayfalar halinde gösterilmesini isteriz. Her ne kadar .NET bize GridView nesnesiyle bunu kolayca kod yazmadan yapmamızı sağlasa da bazen kod ile yazarak bunu yapmamız gerekebiliyor. Bir gün bana da lazım olmuştu ve o anda hiç kod yazmak istemediğimden internetten araştırma yaptım. Ya o zaman ben bulamadım ya da daha önce hiç kimse bunu internette yayınlamamıştı. Sadece bir kod örneği buldum ama o kodu yazan arkadaş da işi öyle bir dolandırmışki tam 3 saat uğraştım ne yaptığını anlamak için. Neticede anladım ama çok fazla zaman kaybetmiştim. Oturup kodu kendim yazmaya karar verdim. Umarım sizin de işinize yarar. Aşağıda verileri çeken bir script bulunmakta. Bu script ile access veritabanına bağlanıyoruz. İstenilen listeyi Sql sorgumuzla belirtiyoruz. Bu işin en önemli espirisi verileri sayfalarken X. Ve Y. kayıtlar arasındaki verileri nasıl çekeceğimizdir. MySQL de bunu “Limit” ile kolayca yapabiliyoruz ancak “MS Sql Server” da bunu yapmak için birazcık kastırmamız gerekiyor. Belki daha başka yolu da vardır ama o anda benim aklıma gelen iç içe “Select” sorgusu kullanarak bunu yapmak oldu. Bir kaç değişken kullanarak bu aralığı kolayca belirtebiliriz. SQL de select ile birlite “TOP” ifadesini de kullandık mı tamamdır.

<script runat=”server”>

    OleDbConnection Baglanti;

    OleDbCommand Command1,Command2;

    OleDbDataReader VeriOku;

 

    int HerSayfadaListelenecekKayitSayisi = 2;

    int ToplamKayitSayisi = 0;

    double ToplamSayfaSayisi = 0;

 

    protected void Page_Load(object sender, EventArgs e)

    {

        Baglanti = new OleDbConnection(“Provider=Microsoft.Jet.OLEDB.4.0;DATA Source=” + Server.MapPath(“vt_kalesray.mdb”));

        Baglanti.Open();

        int Sayfa = Convert.ToInt32(Request.QueryString["Sayfa"]);

        if (Sayfa == 0)

            Sayfa = 1;

 

        Command1 = new OleDbCommand(“Select count(*) from Urunler”, Baglanti);

        ToplamKayitSayisi = (int)Command1.ExecuteScalar();

 

        ToplamSayfaSayisi = Math.Ceiling(Convert.ToDouble((double)ToplamKayitSayisi / (double)HerSayfadaListelenecekKayitSayisi));

        

        int ListeBasi = Convert.ToInt32((HerSayfadaListelenecekKayitSayisi * (Sayfa – 1)));

        int ListeSonu = Convert.ToInt32((HerSayfadaListelenecekKayitSayisi * Sayfa));

    

        if (Sayfa == 1)

            Command2 = new OleDbCommand(“SELECT top “ + HerSayfadaListelenecekKayitSayisi + ” * FROM Urunler”, Baglanti);

        else

            Command2 = new OleDbCommand(“SELECT top “ + HerSayfadaListelenecekKayitSayisi + ” * FROM Urunler WHERE Id NOT IN (SELECT top “ + ListeBasi + ” Id FROM Urunler)”, Baglanti);

        VeriOku = Command2.ExecuteReader();

    }

</script>

Yukarıdaki scripti ASPX sayfamızın <html> etiketinin üstüne eklemeliyiz. Scriptimizi ekledikten sonra listemizin görünmesini istediğimiz yere aşağıdaki kodu eklersek listemizi sayfalar halinde görünecektir Değişkenlerdeki değerleri değiştirerek her sayfalamada kaç adet kaydın gösterileceğini ayarlayabiliriz.

<div>

    <%

        while (VeriOku.Read())

        {

    %>

    <%=VeriOku[2]%>, <%=VeriOku[3]%><br />

    <%

        }

    %>

   

    <%

        for (int i = 1; i <= ToplamSayfaSayisi; i++) {

    %>

        <a href=”Default.aspx?Sayfa=<%=i %>“><%=i %></a>

    <% } %>   

</div> 

Değişken isimlerini uzun uzun yazdığım için ne amaçla kullandığımı kolayca anlayacağınızı sanıyorum. Yine de anlamadığınız biryer olursa yazı hakkındaki yorumlarınızda sorabilirsiniz. Eveeet yazımızın da sonuna geldik. Bir sonraki yazımızda görüşmek üzere…

ASP.NET ile Verileri Sayfalamak ile Benzer Yazılar:

4 Nisan 2009 Saat : 1:38

“ASP.NET ile Verileri Sayfalamak” için 4 Yorum

  1. Kaan diyor ki:

    Her türlü etkiye açık querystring gibi kaynaklar bilgi okurken Convert.ToInt32 ifadesi kullanmak son derece sakıncalıdır diye düşünüyorum.

    long sayfa;
    long.TryParse(Request.QueryString["sayfa"], out sayfa);

    daha sağlıklı olur

  2. oyun oyna diyor ki:

    İnternet asp.net ile sayfalama olayını anlatan en başarılı makale bence. Teşekkürler.

  3. ertugrul diyor ki:

    merhabalar uygulamanızı yaptım fakat kütüphanelerden system.data.oledb’yi nasıl eklediniz onu merak ettim.

  4. msk diyor ki:

    Murat kardeş eline saglık

ASP.NET ile Verileri Sayfalamak Yazısı için Yorum Yapabilirsiniz

 Son Yazılar FriendFeed