Repeater, asp.net de en temiz ve değiştirilebilir veri listeleme öğesi olarak tanımlanabilir. Ama bu sadeliği gridview in aksine özel durumlarla ilgili daha fazla çaba sarfettirmenizi de beraberinde getirir. Veritabanından veri çekerken, sayfalama gibi kolayca yapılabilen bir işlem yapmak bazen uğraştırıcı olabilmektedir. Bu anlamda kullanılabilecek en basit yöntemlerden biri şudur:
kod sayfası - .cs
using System;using System.Data;using System.Collections;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;public partial class PagedRepeater : System.Web.UI.Page{public int PageNumber{get{if (ViewState["PageNumber"] != null)return Convert.ToInt32(ViewState["PageNumber"]);elsereturn 0;}set{ViewState["PageNumber"] = value;}}protected override void OnInit(EventArgs e){base.OnInit(e);rptPages.ItemCommand +=new RepeaterCommandEventHandler(rptPages_ItemCommand);}protected void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack)LoadData();}private void LoadData(){SqlConnection cn = new SqlConnection("baglantıSatırı");cn.Open();SqlDataAdapter da = new SqlDataAdapter("sqlSorgusu", cn);DataTable dt = new DataTable();da.Fill(dt);cn.Close();PagedDataSource pgitems = new PagedDataSource();DataView dv = new DataView(dt);pgitems.DataSource = dv;pgitems.AllowPaging = true;pgitems.PageSize = 25;pgitems.CurrentPageIndex = PageNumber;if (pgitems.PageCount > 1){rptPages.Visible = true;ArrayList pages = new ArrayList();for (int i = 0; i < pgitems.PageCount; i++)pages.Add((i + 1).ToString());rptPages.DataSource = pages;rptPages.DataBind();}elserptPages.Visible = false;rptItems.DataSource = pgitems;rptItems.DataBind();}void rptPages_ItemCommand(object source,RepeaterCommandEventArgs e){PageNumber = Convert.ToInt32(e.CommandArgument) - 1;LoadData();}}
- Bu kod 2 repeater (tekrarlayıcı) kullanır. Bir tanesi içeriği listelerken, diğeri sayfalama işleri için kullanılır.
- Görüldüğü üzere LoadData dahilinde tüm içerik çekilir. Sayfalama yapılacak sayfa sayısı da tüm içerik sayısını 25 e bölerek bulunur. Tabii ki burada sayfa başına 25 içerik gösterildiği için bu şekildedir. Bu sayıyı değiştirebilirsiniz.
- Kullanıcının içinde bulunduğu sayfa numarası ViewState ile tutulmaktadır.
arayüz sayfası - .aspx
<%@ Page Language="C#"AutoEventWireup="true"CodeFile="pagedrepeater.aspx.cs"Inherits="PagedRepeater" %><html><head><title>Sayfalı Repeater</title></head><body><form runat="server"><asp:Repeater ID="rptPages" Runat="server"><HeaderTemplate><table cellpadding="0" cellspacing="0" border="0"><tr class="text"><td><b>Sayfa:</b> </td><td></HeaderTemplate><ItemTemplate><asp:LinkButton ID="btnPage"CommandName="Page"CommandArgument="<%#Container.DataItem %>"CssClass="text"Runat="server"><%# Container.DataItem %></asp:LinkButton> </ItemTemplate><FooterTemplate></td></tr></table></FooterTemplate></asp:Repeater><asp:Repeater ID="rptItems" runat="server"><HeaderTemplate><ul></HeaderTemplate><ItemTemplate><li><%# Eval("pkItemID") %>: <%# Eval("Description") %></li></ItemTemplate><FooterTemplate></ul></FooterTemplate></asp:Repeater></form></body></html>