CollectionPager İle Repeater veya DataList Listeleme
Genellikle Asp.NET aleminde Repeater veya DataList gibi veri listeleme kontrolleri vazgeçilmezdir.Bazen binlerce kayıtın tutulduğu listeleri DataSource’lerine atarız.Haliyle çok kullanışlı olduklarından dolayı bazı durumlarda GridView yerine bu nesneleri kullanırız.Tabi artıları olduğu kadar eksileride mevcuttur.GridView’de yapılan sayfalama işlemi ne yazık ki Repeater ve DataList nesnelerinde daha teferruatlı ve zahmetlidir.Hal böyleyken CollectionPager sınıfı yardımımıza koşmaktadır.
Öncelikle bu sınıfın .dll dosyasını buradan indiriniz.
Şimdi ise ne işe yarar, nasıl mantığı vardır ve nasıl kullanılır irdeleyelim.
CollectionPager Repeater veya DataList nesnelerinde sayfalama işlevini gören bir sınıftır.
CollectionPager’ın mantığını izah etmek gerekirse, 2 satır kodla oluşturulan bir algoritma sayesinde QueryString yardımıyla listeleme görevi görmektedir.
Bu konuyla ilgili çok gereği olmayan teorik bilgilerden sonra asıl mevzumuz nasıl kullanılacağıdır.
Ben örnek olarak Visual Studio’da boş bir Web Projesi açıyorum.Öncelikle indirdiğimiz CollectionPager.dll dosyasını Toolbox penceresinde her hangi bir taba sağ tıklayarak(ya da bir tab açarak) Choose Items sekmesini seçip açılan pencereden CollectionPager.dll dosyamızı ekliyoruz.Şimdi ise sayfamıza Repeater ve Toolbox penceresine eklediğimiz CollectionPager nesnelerinden birertane koyuyoruz.
<%@ Register Assembly="CollectionPager" Namespace="SiteUtils" TagPrefix="cc1" %>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<%#Eval("Veri") %>
</ItemTemplate>
</asp:Repeater>
<cc1:CollectionPager ID="CollectionPager1" PageSize="10" runat="server" BackNextLocation="Split" BackText="Geri" FirstText="İlk" LabelText="Sayfa:" LastText="Son" NextText="İleri" QueryStringKey="Sayfa" ResultsFormat="Sayfa {0}-{1} (of {2})"></cc1:CollectionPager>
Şimdi ise .cs sayfamıza gelip aşağıdaki satırları yazalım.
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
VerileriGetir();
}
}
void VerileriGetir()
{
...//Varsayıyorum ki VeriListesi adında bir listemiz var.
CollectionPager1.DataSource = VeriListesi;
CollectionPager1.BindToControl = Repeater1;
Repeater1.DataSource = CollectionPager1.DataSourcePaged;
...
}
CollectionPager1 nesnemizin PageSize özelliği 10 olduğundan dolayı, her 10 veride bir sayfalama işlemi yapılacaktır.
İyi çalışmalar

hocam herşeyi denedim fakat benim sayfada cıkmıyor, ilk 5 göster diyorum cok güzel 5 gösteriyor fakat pager cıkmıyor ne önerirsin
nesnesini sayfanıza eklediniz mi?
CollectionPager sayfalama yapıyorum sadece tüm verileri çektiğimde sorun yok fakat dropdownlist içinden bir veri seçip gönderdiğimde görüntüleyemiyorum CollectionPager kaybolup ekrana hiçbirşey gelmiyor
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ders();
Sorular();
}
void Sorular()
{
var sorulist = (from v in sorubank.Tbl_Sorus
join v1 in sorubank.Tbl_Cvps on v.Soru_ID equals v1.Soru_ID
join v2 in sorubank.Tbl_DogruCvps on v.Soru_ID equals v2.Soru_ID
join v3 in sorubank.Tbl_Derslers on v.Ders_ID equals v3.Ders_ID
where v3.Ders_ID == Convert.ToInt32(DDLDers.SelectedValue)
select new
{
v.Soru_ID,
v.Soru,
v2.DogruCvp,
v1.CvpA,
v1.CvpB,
v1.CvpC,
v1.CvpD,
v3.Ders_Adi
}).ToList();
DLSoru.DataSource = sorulist;
DLSoru.DataBind();
ccpage.DataSource = sorulist;
ccpage.BindToControl = DLSoru;
DLSoru.DataSource = ccpage.DataSourcePaged;
}
void ders()
{
DDLDers.DataValueField = “Ders_ID”;
DDLDers.DataTextField = “Ders_Adi”;
if (Session[“Egitmen_ID”] != null)
{
DDLDers.DataSource = sorubank.Tbl_Derslers.Where(v => v.Egitmen_ID == Convert.ToInt32(Session[“Egitmen_ID”])).ToList();
DDLDers.DataBind();
}
}
protected void DDLDers_SelectedIndexChanged(object sender, EventArgs e)
{
Sorular();
}
sorun nerde acaba yardımcı olurmusunuz
Merhaba,
DropDownList nesnesinin SelectedIndexChanged Event’ında Sorular isminde ki metodu çağırıyorsunuz.Page_Load metodu içinde de, IsPostBack kontrolü içinde gene Sorular metodunu çağırıyorsunuz.Page_Load metodundan Sorular’ı silin.Birde öyle deneyin.Eğer olumlu sonuc almazsanız, Breat Point ile programın akışını takip edin.
Şunada dikkat etmek gerekiyor.CollectionPager nesnesinin PageSize özelliğinden az veri gösterilecekse, sayfalama yapılmayacaktır.
Hocam merhaba, CollectionPager1.DataSource = VeriListesi; kodunda VeriListesinyerine ne yazacağım?
kodum şu şekilde:
OleDbConnection baglantix = new OleDbConnection();
baglantix.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” + Server.MapPath(“~/App_Data/tercume.accdb”);
baglantix.Open();
OleDbCommand cmdListele = new OleDbCommand();
cmdListele.Connection = baglantix;
cmdListele.CommandText = (“Select top 20 * from TB_tercumanlar”);
dlZiyaret.DataSource = cmdListele.ExecuteReader();
dlZiyaret.DataBind();
cmdListele.Dispose();
CollectionPager1.DataSource = VeriListesi;
CollectionPager1.BindToControl = dlZiyaret;
dlZiyaret.DataSource = CollectionPager1.DataSourcePaged;
baglantix.Close();
Teşekkürler.
Hocam ben olayı çözdüm. Teşekkürler.