Osman KURT

Yazılım Uzmanı | MVC Eğitmeni

ASP.Net de Verileri CollectionPager ile Sayfalama

Arkadaşlar bu yazımızda projelerimizin vazgeçilmezi sayfalamadan bahsedecğim. Biliyosunuz sayfalama bir verinin gösterilirken ki en önemli öğesidir. Bizde bu yüzden projelerimizde sayfalamaya önem vermeliyiz.

Sayfalamamızı CollectionPager dll dosyamız ile yapacağız.

Lafı fazla uzatmadan ben kodlarıma geçeyim, kodlarımız çok basit arkadaşlar. İlk olarak verdiğim collectionpager.dll (32,00 kb) dll dosyasını indirip projenize referans olarak ekleyin ve toolbarınıza da çektikten sonra kodlarımızı yazmaya başlayalım.

Default.aspx sayfasında ki kodlarımız;

<asp:DataList ID="DataList1" runat="server">
     <ItemTemplate>
          <%#Eval("SayfaAd_tr") %>
     </ItemTemplate>
</asp:DataList>
<cc1:CollectionPager ID="CP1" runat="server" SliderSize="1" ShowPageNumbers="True" LabelText="Sayfa" PageSize="1" NextText="İleri" LastText="Son" BackText="Geri" FirstText="İlk">
</cc1:CollectionPager>

Ön yüzde işimiz bu kadar arkadaşlar bir adet Datalist ve eklediğimiz CollectionPager ile işi bitiriyoruz. Buradaki ayarları siz veri listeleme şeklinize göre ayarlayabilirsiniz.

Default.aspx.cs sayfamızda ki kodlarımızı ise load olayına şu şekilde yazıyoruz.

 

SqlConnection cnn = new SqlConnection("veritabanı bağlantı yolu");
SqlCommand cmd = new SqlCommand("Select * from Sayfalar", cnn);
cnn.Open();
SqlDataReader dr = cmd.ExecuteReader();
DataTable dt = new DataTable("OsmanKURT");
dt.Load(dr);
CP1.DataSource = dt.DefaultView;
CP1.BindToControl=DataList1;
DataList1.DataSource =
CP1.DataSourcePaged;
DataList1.DataBind();
cnn.Close();
 

Kodlarımız bu kadar arkadaşlar.

Umarım faydalı olur.

Görüşmek üzere

Osman KURT

Yazılım Geliştirici ve Grafiker

 

Yorumlar (28) -

  • Ersin Akıncı

    24.7.2012 12:41:44 | Yanıtla

    Hocam bir sorum olacaktı.

    Şimdi mesela 10bin tane ürün var ve ben 50lik sayfalama yapıyorum.

    Collectionpager database den veriyi çekerken verinin tamamına tek seferde ulaşıp hepsini hafızada mı tutuyor, yoksa her defasında 50lik kısmı mı database den çekiyor.

    • osmankurt

      24.7.2012 15:49:53 | Yanıtla

      Merhaba Ersin,
      Sorunun cevabını tam olarak bilmemekle birlikte kullandığım projeler üzerinden giderek söylüyorum gayet performanslı çalışıyor. Yani her seferinde 50 adet çekme olasılığı yüksek. Ama senin için bakarım. Eğer sende cevabını bulur ve buradan paylaşarsan çok mutlu olurum.

  • numki

    29.11.2012 18:59:59 | Yanıtla

    merhaba hocam herbir sayfada 4 adet item gösterilmesini istiyorum bunu hangi property lerle yapabilirim

    • osmankurt

      30.11.2012 02:23:01 | Yanıtla

      Merhaba,
      Alt kısımda ki kod bloğun da düzenleme yapman lazım 1 ise 4 ise 4 sana kalmış.

      <cc1:CollectionPager ID="CollectionPager1" runat="server" SliderSize="1" ShowPageNumbers="True"  LabelText="Sayfa" PageSize="1" NextText="İleri" LastText="Son" BackText="Geri" FirstText="İlk">
      </cc1:CollectionPager>

      • numki

        30.11.2012 11:55:09 | Yanıtla

        mrb hocam,evet peki hangi property değerlerini nasıl değiştirmem lazım çünkü yaptığım değişiklikler sonuç vermiyor

        • osmankurt

          1.12.2012 04:42:49 | Yanıtla

          Merhaba  Numan,

          Önce ki yorum da yazan 1'ler varya o kısımlarda ki ayarlar da değişim yapman lazım. Hatta sana şöyle söyleyim .aspx sayfana eklediğin kod bloğu varya onun üzerine tıkladığın da Visual studio propertie ekranın da bütün özellikleri dökülüyor oradan istediğin ayarları yapabilirsin.

          • numki

            1.12.2012 14:30:41 | Yanıtla

            tamam hocam birbirimizi anlamıyoruz  cevaplarınız için teşekkürler

  • Emre

    10.2.2013 07:54:33 | Yanıtla

    Peki hocam bunu 4.0 'daki routing olayına nasıl entegre edebiliriz. Çünkü deneme yaptım ama linkleri pasif hale getiriyor.

  • mesut

    7.3.2013 04:45:55 | Yanıtla

    hocam bu şekilde sadece 10 kaydı gösteriyor 11. kaydı göstermiyor son sayfaya geldi diye ileri gitmiyor bu sorunu nasıl aşarız

    • osmankurt

      7.3.2013 13:26:51 | Yanıtla

      Ön sayfamıza eklediğimiz kodlarımız da gerekli ayarlar mevcut. Kaç sayfa olsun her sayfa da kaç kayıt olsun gibi bilgileri buradan yönetebiliyoruz. Yada ön sayfamız da design kısımın da collectionpager nesnemizin üzerine tıkla sağ taraftaki propertie kısmından da ayarlayabilirsin.

  • emre can

    27.6.2013 18:52:04 | Yanıtla

    hocam ben bunu Repaeter ilke yaptığımda
    Repeater1.DataBind(); satırında
    "Cannot compute Count for a data source that does not implement ICollection." diye bir hata alıyorum nedendir acaba.

    baglanti kodlarım aşağıdaki gibi

               SqlConnection baglanti = metodlar.baglan();
                SqlCommand cmd = new SqlCommand("select * from tbl_orj", baglanti);
                CollectionPager1.DataSource = cmd.ExecuteReader();
                CollectionPager1.BindToControl = Repeater1;
                Repeater1.DataSource = CollectionPager1.DataSourcePaged;
                Repeater1.DataBind();
                cmd.Dispose();
                baglanti.Dispose();
                baglanti.Close();

  • yener

    10.1.2014 19:33:14 | Yanıtla

    osman bey mrb benim kodlarda  sıkıntı  yok ama 2. sayfaya geçtiğimde urunID ler karışıyor.
    urunID 20 olan urun Yerine bana 6 ID li urunu gösteriyor bu sorunu nasıl çözerim...

    • osmankurt

      11.1.2014 00:13:02 | Yanıtla

      Merhaba Yener,
      Bu kodu daha önceki projelerimde bende kullandım fakat böyle bir sorunla karşılaşmadım. Test edebileceğim bir yer gösterebilir misin?

      • yener

        11.1.2014 17:15:39 | Yanıtla

        osman bey projemden kaldırmak zorunda kaldım sorun düzelmeyince

  • Mahmut Arslan

    23.1.2014 18:16:33 | Yanıtla

    Merhaba, localhostta çalışıyor fakar sunucuya attığımda load edemiyor. Bu sorunu nasıl çözebilirim?
    Parser Error

    Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.

    Parser Error Message: The directive is missing a 'tagname' attribute.

    Source Error:


    Line 1:  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    Line 2:  
    Line 3:  <%@ Register Assembly="CollectionPager" Namespace="SiteUtils" TagPrefix="cc1" Src="/sallamasyon.dll"%>
    Line 4:  
    Line 5:  <!DOCTYPE html>

    • osmankurt

      23.1.2014 22:31:16 | Yanıtla

      Merhaba Mahmut,
      Dosyaları tam olarak server'a attığına emin misin?

      • Mahmut Arslan

        24.1.2014 13:41:05 | Yanıtla

        Evet eminim.

  • erhan

    26.2.2014 17:09:56 | Yanıtla

    Merhaba Osman Bey,
    Datalist sayfalama yapmak için collectionpager kullandım.
    Aynı zamanda linklerin düzgün olması içinde url rewrite yaptım.
    direk ürünler sayfasına gittiğim zaman herhangi bir problem yok fakat kategoriden ürünler sayfasına gittiğim url: xxx.com/kulp-askilar.aspx şeklinde oluyor. collectionpagerdan 1.2.3 sayfalardan herhangi birine geçmeye çalıştığımda hata veriyor.
    Hata:
    Zararlı olabilecek bir değer Request.Form algılandı.
    İnternette bununla ilgili çözümleri denedim fakat işe yaramadı.

    sayfada

    ValidateRequest ="false"

    webconfig de
    <httpRuntime requestValidationMode="2.0"/>

  • Soner SARIÇAYIR

    22.5.2014 17:30:10 | Yanıtla

    Merhabalar, Bende kullandım ancak  aşağıdaki şekilde kullanınca sayfalama yapmıyor. Diğer türlü kullanıncada benim işime yaramıyor. Diğer fonksiyonlarım çalışmıyor. Bunun bu şekilde çalıştırabileceğim bir yöntem varmıdır acaba...?
    if (!Page.IsPostBack)
    {
                    fillGrid();
    }

    • osman kurt

      26.5.2014 13:55:39 | Yanıtla

      Merhaba,
      Söylediğiniz için ajax post ile sayfalama yapacaksınız. Anladığım kadarı ile post atmak istemiyorsunuz sayfaya.

  • murat

    10.8.2014 19:38:58 | Yanıtla

    altta sayfalar listeleniyor. 1-2-3 diye. 2 ve ya 3. sayfaya tıklayınca 2. ve 3. sayfa linkleri kayboluyor ve o sayfadaki kayıtlar gelmiyor. sorun nerde?

  • cüneyt türe

    26.1.2016 13:02:33 | Yanıtla

    Merhabalar,
    Size bir sorum olacak,ben web sayfası içerisinde arama kısmı var. kelime araması yaptırıyorum aranan kelimeleri sitede bulduruyorum.buraya kadar sorun yok fakat aranan kelime bunu kitap gibi düşünün farzedelim 12.sayfada yer alıyor datalistle sayfayı bastırıyorum fakat collectionpager ı direk 12.sayfaya getiremiyorum.bunu nasıl çözebilirim.
    şimdiden yardımlarınız için teşekkürederim.

    • Osman KURT

      26.1.2016 20:51:27 | Yanıtla

      Merhaba,
      Açıkcası söylediğin mantıkda bir arama ile hiç karşılaşmadım. Arama mantıkları genelde ilgili sonuçları gösterir yani 12. sayfa da değil direkt olarak bir bütün halinde arama sonuçlarını gösterir.

  • Serdar

    13.6.2016 10:34:22 | Yanıtla

    Kaçıncı sayfada olduğumu anlayamıyorum. Hangi sayfada olduğumu belirten mesela olduğum sayfasının numarasını kırmızı yapmak istiyorum nasıl yapabilirim?

  • UĞUR

    23.6.2016 17:54:09 | Yanıtla

    Sayın Hocam,
    SQL için bilgi vermişsiniz. Bana Access DB için bilgi gerekmektedir. Bu konuda da yardımlarınızı rica ederim.

    • Osman KURT

      23.6.2016 21:49:21 | Yanıtla

      Selam Uğur,

      Değişen birşey yok ki SqlConnection yerine OleDBConnection, SqlCommand yerine de OleDBCommand oluşturacaksın. Diğer kodlar zaten aynı.

      • Uğur

        26.6.2016 14:41:01 | Yanıtla

        Bilgi için teşekkür ederim. Web yazılım geliştirmeye yeni başladım. Hocam bir sorum olucak, Datalist içerisinde bir vitrin ürün satış tasarımı oluşturdum. Datalist icindeki vitrinde yer alan urunler listesini fiyata göre nasıl sıralayabilirim.
        Gezmediğim web sayfası kalmadı. Bildiğiniz bir kaynak var mı? Yardımlarınız icin tesekkurler.

        • Osman KURT

          26.6.2016 23:38:36 | Yanıtla

          Uğur,
          Madem yeni başladın sana tavsiyem angular.js öğren çünkü veriyi bir kere liste olarak çektikten sonra içinde sıralama da yaparsın filtreleme de. Hazır yenisin yazılımda son teknolojiyi öğren piyasada çok iş yaparsın.

Loading