Repeater ve DataList ile sayfalama işlemi

by Administrator 5. August 2010 23:34

Bazı çalışmalarımızda o kadar çok kayıtla uğraşıyoruzki kayıtları sayfalamamız gerekiyor. Repeater ya da DataList ile DataPager kontrolü kullanamadığımızdan kendimiz bir takım kod yazarak sayfalama işlemini gerçekleştiriyoruz. Bu gün pratik ve hızlı bir şekilde nasıl sayfalama yapabileceğimizi inceleyeceğiz. İlk olarak CollectionPager.dll (32,00 kb) dosyamızı indirelim. Dosyamızı indirdikten sonra Visual Studio'da Toolbox'a import edelim. Yeni bir web sitesi açalım ve Default.aspx sayfamızın üzerine bir adet Repeater kontrolü bir adetde eklediğimiz CollectionPager.dll dosyamızdan oluşan kontrolü yani CollectionPager kontrolünü ekleyeylim ve sayfamızdaki kontrollerin özelliklerini aşağıdaki gibi değiştirelim. 

<asp:Repeater ID="rMakaleListe" runat="server">
<ItemTemplate>
<%# Eval("mBaslik") %><br/>
</ItemTemplate>
</asp:Repeater>
<cc1:CollectionPager ID="cpSayfala" runat="server" BackText="« Önceki" FirstText="İlk" LabelText="Sayfa :" LastText="Son" NextText ="Sonraki »" PageNumbersDisplay="Numbers" PageSize="10" SectionPadding="10" QueryStringKey="SF" ResultsLocation="None" ShowFirstLast="False" ShowLabel="True" ShowPageNumbers="True" BackNextLinkSeparator="">
</cc1:CollectionPager> 

CollectionPager kontrolümüzde sayfada kaç kaydın yer alacağı vb ayarlamaları yapabiliyoruz. Projemizde App_Data klasörüne Makele.mdb (1,24 mb) veritabanımızı ekleyelim ve web.config dosyasına veritabanına bağlanabilmemiz için gereken aşağıdaki kodu ekleyeyim.

<appSettings>
<
add key="ConnectionString" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Makele.mdb;Persist Security Info=True"/>
</
appSettings> 

Defaultaspx.cs dosyamıza aşağıdaki gibi kodlarımızı yazalım.

    DataTable Veri;
    String Sql;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
                MakaleGetir();
        }

    }
    private string Baglanti = ConfigurationManager.AppSettings["ConnectionString"];
    private DataTable VeriGetirDT(string Sql)
    {
        DataTable DT = new DataTable();
        try
        {
            OleDbConnection objBag = new OleDbConnection(Baglanti);
            objBag.Open();
            OleDbDataAdapter DA = new OleDbDataAdapter(Sql, objBag);
            DA.Fill(DT);
            return DT;
            objBag.Close();
            DT.Dispose();
        }
        catch
        {
            return new DataTable();
        }

    }
    protected void MakaleGetir()
    {
        Sql = "SELECT mID, mBaslik FROM tblMakale";
        Veri = VeriGetirDT(Sql);
        if (Veri.Rows.Count != 0)
        {
            cpSayfala.DataSource = Veri.DefaultView;
            cpSayfala.BindToControl = rMakaleListe;
            rMakaleListe.DataSource = cpSayfala.DataSourcePaged;
            rMakaleListe.DataBind();
        }
    }

Burada VeriGetirDT fonksiyonu gelen sql ifadesini alır ve geriye Datatable tipinde kayıtları döndürür. MakaleGetir adı altında bir fonksiyon oluşturduk ve burada yazdığımız sql cümleciğini VeriGetirDT fonksiyonuna yolladık ve gelen değerleri CollectionPager kontrolümüzün DataSource'una bağlaladık ve Repeater kontrolümüzün DataSource'una CollectionPager kontrolümüzü bağladık. Projemizi çalıştırdığımızda ise aşağıda resimdeki gibi bir sayfayla karşılaşacağız.

 

Gördüğünüz gibi pratik ve hızlı bir şekilde kayıtlarımızı sayfaladık. Projenin tamamını buradan indirebilirsiniz.

Bir sonraki makalemde görüşmek üzere.

Tags: , , ,

ASP.NET

Comments (5) -

Abd&#252;lkerim D&#252;lger
Abdülkerim Dülger
8/16/2010 1:12:07 AM #

Bilal abe öncelikle eline sağlık güzel bi örnek olmuş. Dosyaları indirebilecek şekilde burdan paylaşmanda yeni öğrenenler için çok daha kavratıcı olacağı kanaatindeyim. Bi sorum olacaktı, bu datalist le kodsuz bi şekilde yapılabiliyor mu peki ? yoksa datalist ile sayfalatırken de ekstra kod parçacıkları yazmamız gerekiyor mu ?

Reply

Admin
Admin
8/17/2010 2:12:11 PM #

Teşekkür ederim Kerim. Evet Repeater'de olduğu gibi Datalist'te de bu şekilde sayfalama yapabilirsin ekstra kod yazmaya gerek yok.

Reply

Abdurrahman
Abdurrahman
9/1/2010 5:07:19 PM #

bu güzel yazınız için teşekkürler. Ben bu işlemi datalist ile yapmaya çalışıyorum. cpSayfala.DataSource nesnesini datalist'ime veri çekerken kullandığım AccessDataSource1'e bağlamak istiyorum. bunu nasıl yapabilirim. aksi halde ikisi birden kullanıldığında hata alıyorum.

Reply

Admin
Admin
9/1/2010 8:20:06 PM #

Merhaba Abdurrahman;

cplSayfala nesnesini seçtikten sonra Properties bölümünden DataSource kısmını kendi DataSouce'nu seçerek yapabilirsin. Yine aynı bölümden BindToControl özelliğinide kullandığın Datalist'ini seçmeyi ve cplSayfala nesnesinide Datalistinin DataSource'na bağlamayı unutma.

Reply

Abdurrahman
Abdurrahman
9/1/2010 8:23:25 PM #

açıklamanız için teşekkür ederim. makalenizden yola çıkarak kendi çabalarımla birşeyler yaptım Smile. accessdatasource1'e gerek kalmadı. bu güzel yazı için tekrar teşekkürler Smile

Reply

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading






Month List

Page List