mehmetduran.com - Paylaşmak Güzeldir...
Asp.net ve Mysql ile Dataları Sayfalama İşlemi
Bu yazımda web ortamında Mysql ile aldığımız verileri sayfalamayı anlatmaya çalışacağım. Bu yöntemi kendi sitemde kullanıyorum ve bir arkadaşın nasıl yaptığımı sorması üzerine bu yazıyı hazırlamaya karar verdim. Yazmayı planladığım, oldukça faydalı olacağını düşündüğüm bir yöntem. Bu yöntem ile bloglarda, forum sitelerinde, haber sitelerinde gördüğümüz sayfalama işlemlerini çok rahat yapabiliriz. Sayfalama için gereken adımlara ve yapmamız gereken işlemlere bakalım.

Öncelikle sayfalama yapacağımız dataların sayısını bilmeliyiz. Bu sayıya göre de oluşacak sayfa sayısını bulmalı ve sonra sayfalar arasında gezinti yapmamız için sayfalama linkleri oluşturmalıyız. Veriler üzeinde sayfalama yapmak ve dolaşmak için bu değerleri bulacak işlemleri gerçekleştirmeliyiz.

Dataların sayısını bulmak için bir sorgu yapmamız gerekiyor. Bu sorgu ile dataların sayısını buluyoruz. Dataların sayısını bulduktan sonra sayfalama adetine (her sayfada gözükecek veri sayısı) göre oluşacak sayfa sayısını hesaplıyoruz. Sayfa sayısını da hesapladıktan sonra sayfalar ve veriler arasında dolaşabilmek için sayfala linkleri oluşturmalıyız. Tüm bu adımları sırayla yaptığımızda sayfalama uygulamasını yapmış oluyoruz. Aşağıda yazdığım örnek kod ile sayfalama uygulamasını daha iyi anlayabilirsiniz.

  MySqlConnection baglantim;
  string baglanti_cumlesi;
 
  int toplam_data_sayisi, sayfa_sayisi, sayfa_numarasi, sayfalama_adeti = 2;
 
  protected void Page_Load(object sender, EventArgs e)
  {
    baglanti_cumlesi = "server=localhost; user=root; password=root; database=test";
    baglantim = new MySqlConnection(baglanti_cumlesi);
 
 
    //url'den sayfa bilgisini alıyoruz.
    if (Request.QueryString["sayfa"] == null) sayfa_numarasi = 1;
    else { sayfa_numarasi = int.Parse(Request.QueryString["sayfa"]); }
 
    toplam_data_sayisi_bul(); // toplam data sayısnı hesaplıyoruz
 
    //hangi dataları alacağımızı hesaplayıp kontrolümüze yüklüyoruz.
    Repeater1.DataSource = datalarim((sayfa_numarasi - 1) * sayfalama_adeti, sayfalama_adeti);
    Repeater1.DataBind();
 
    //link vermek için sayfa numaralarını oluşturup, yazdırıyoruz.
    sayfa_numaralari.InnerHtml = sayfa_numaralarini_olustur();
  }
 
  // hangi dataların alınacağının hesaplanması
  public DataTable datalarim(int baslangic_satiri, int satir_sayisi)
  {
    string sorgu = "select * from deneme desc limit " + baslangic_satiri + "," + satir_sayisi;
    MySqlDataAdapter adaptor = new MySqlDataAdapter(sorgu, baglantim);
    DataTable tablo = new DataTable();
    adaptor.Fill(tablo);
    return tablo;
  }
 
  //toplam data_sayisi
  public void toplam_data_sayisi_bul()
  {
    MySqlCommand komut = new MySqlCommand("select count(*) from deneme", baglantim);
    baglantim.Open();
    toplam_data_sayisi = (int)(long)komut.ExecuteScalar();
    baglantim.Close();
  }
 
  //sayfalama sonucu oluşan sayfa sayısı
  public int olusan_sayfa_sayisi()
  {
    if (toplam_data_sayisi % sayfalama_adeti == 0) sayfa_sayisi = toplam_data_sayisi / sayfalama_adeti;
    else { sayfa_sayisi = (int)(toplam_data_sayisi / sayfalama_adeti) + 1; }
    return sayfa_sayisi;
  }
 
  //sayfalama sonucu link vermek için kullanacağımız sayfa numaraları
  public string sayfa_numaralarini_olustur()
  {
    string sonuc = "";
    for (int i = 1; i <= olusan_sayfa_sayisi(); i++)
    {
      sonuc += "<a href='sayfa_adi.aspx?sayfa="+i+"' class='link'>"+i+"</a>";
    }
    return sonuc;
  }

Sayfalama işleminde Mysql'in en avantajlı tarafından biri limit komutunun olması. Limit komutu ile istediğimiz sayıda istediğimiz kayıtları çekebiliyoruz. Mysql ile sayfalama işleminde en önemli noktayı limit komutu belirliyor.

Diğer veritabanlarında (access ve mssql) limit komutu yok. Bu yüzden bu veritabanlarında sayfalama yapmak için başka yöntemler kullanabiliriz. Bunlardan biri; veritabanında tüm kayıtları datatable veya dataset'e alıp bu kontrol üzerinden sayfalama yapmaktır. Büyük dataların olduğu projelerde bu yöntem kullanışsız olur. Diğer bir yöntem ise ms sql'de bu işlemi yapacak procedure'ler oluşturmak ve bunları kullanmak olacaktır. Önümüzdeki günlerde bu uygulamayı ms sql ile de yapmayı planlıyorum. Yaptığımda o uygulamayı da sitemde bulabilirsiniz.

Sayfalama işleminden sonra sayfalar arasında gezinirken kullanıcının hangi sayfada oluğunun bilgisini url'den sayfa isimli parametreden elde ediyoruz. Buna göre sayfamıza verileri dolduruyoruz. Bu bilgiyi ben uygulamalarımda url'den alıyorum. Ancak sizler bu bilgiyi Session veya diğer işlemler ile eldebilirsiniz.

Mysql ile sayfalama işlemi için yukarıda kodları kullanabilirsiniz. Ayrıca bu kodlar ile oynayarak istediğiniz şekilde sayfalama uygulamasını şekillendirebiliriz.

İyi Çalışmalar!
Mehmet Duran 20 Aralık Cumartesi 2008 7 13536 4,8
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Sınavların Ardından Bloğumda ve Projelerimde Kullandığım RSS Sınıfı C Sharp'ta Split Metodu Kullanımı MySql'de Fonksiyon Tanımlama ve Kullanma Javascript ile Belli Bir Süre Bekletme ve Yönlendirme İşlemi
Yorumlar
Yorum Yaz
RSS Yorum Takibi
yakup buğra 21 Aralık Pazar 2008 20:52 #1
peki bunların hepsini yaptık. Alttaki sayfa numaralarını gösteren bir asp.net kontrolü var mı?
Mehmet Duran 21 Aralık Pazar 2008 22:32 #2
Sayfa numaralarını göstermek için yazdığımız metodun sonucunu istediğimiz html yada asp.net kontrolüne yazdırabiliriz. Ben örnekte html kontrolüne(span) yüklüyorum. Asp.net kontrolü olarakta label'e yüklenebilir. Ayrıca renklendirme için verdiğimiz css class ile istediğimiz tasarımı elde edebiliriz.
Ahmet Dogru 25 Aralık Perşembe 2008 16:43 #3
sayfa_numaralari.InnerHtml = sayfa_numaralarini_olustur(); buradaki InnerHtml icin bir reference gereklimi? hata verdi
ahmet dogru 25 Aralık Perşembe 2008 16:56 #4
sayfa_numaralari.InnerHtml sayfa?numaralari neyi temsil ediyor bulamadım. eger sayfa_numarasi ise int türünden oldugu icin innerhtml diye birşey icermiyor hatası var.
Mehmet Duran 25 Aralık Perşembe 2008 21:25 #5
Buradaki innerHtml html span kontrolüne runat="server" özelliği atadığımızda kod tarafında span kontrolüne erişmemizi sağlıyor. innerHtml ise span değerine kod tarafında atadığımız verileri yüklüyor. Bunun yerine label kontrolü kullanabiliriz. (Label1.Text=sayfa_numaralarini_olustur();)
ImmorTaLGoD 06 Eylül Pazar 2009 21:42 #6
Sayfa numara konusu dışında yapımı kolaymış.Eline sağlık.
osman 11 Şubat Perşembe 2010 16:46 #7
dosyayı indiremiyormuyuz çalıştıramadım ben de
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Kimse sana senden iyi öğüt veremez.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009