Yazılımcının Günlüğü | YazilimGunlugu.Com
Arama
Makale Kategorileri
Üye Girişi
Şuanki online üyeler()
Aktif üye bulunmamaktadır.


Datalist İle Numerik Bazlı Sayfalama

Yazar: Sem GÖKSU

Kategori: ASP.NET

Eklenme Tarihi: 22.05.2007 02:14:29

Merhaba arkadaşlar bu makalemde Datalist nesnesinde Numeric(1.2.3...) bazli sayfalamanin nasıl yapılacağına bakacağız.

Datalist ve Repeater nesnelerin de görüntülenecek kayit sayisinin çok fazla oldugu durumlar da kayitlarimizi sayfalama ihtiyaci duyariz. Bu bize kayitlarin daha hizli görüntülenmesini saglar ve ayni zamanda kullaniciya gösterilmek istenilen bilgi daha derli toplu gösterilir. Ben bu makalede sayfalari Numeric olarak listeletecegim ve gitmek istedigimiz sayfaya tikladigimizda o sayfaya gidebilecegiz. Örnek vermek gerekirse google’ da “sem göksu” diye arama yaptığımizda sayfalarin Numeric olarak listelendigini görecegiz.

Ön bilgiyi verdikten sonra makalemize baslayabiliriz. Bunun için projemize ilk olarak bir adet Datalist nesnesi ekleyelim. Datalist nesnesinde ben Northwind database’deki Customers tablosunu kullanacagim. Datalist nesnesi içerisinde de CustomerID, CompanyName ve ContactName Fieldlerini görüntüleyecegim.

Benim düzenlemis oldugum Datalist Nesnesinin son hali asagidaki gibidir;

DatalistNesnesinin HTML Kodlari;

<asp:DataList ID="DataList1" runat="server" BackColor="White" BorderColor="#E7E7FF"

BorderStyle="None" BorderWidth="1px" CellPadding="3" Font-Names="Trebuchet MS" Font-Size="X-Small" GridLines="Horizontal" RepeatLayout="Flow">

<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />

<SelectedItemStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />

<ItemTemplate>

<table border="0" cellpadding="0" cellspacing="0" style="width: 392px">

<tr>

<td style="width: 129px; height: 19px">

<asp:Label ID="Label3" runat="server" Font-Bold="True" Font-Names="Trebuchet MS" Font-Size="Small"

Text="Customer ID"></asp:Label></td>

<td style="width: 17px; height: 19px">

:</td>

<td style="width: 300px; height: 19px">

<asp:Label ID="lblCustomerID" Text='<%# DataBinder.Eval(Container.DataItem,"CustomerID") %>' runat="server" Font-Names="Trebuchet MS" Font-Size="Small"></asp:Label></td>

</tr>

<tr>

<td style="width: 129px; height: 19px">

<asp:Label ID="Label2" runat="server" Font-Bold="True" Font-Names="Trebuchet MS" Font-Size="Small"

Text="Company Name"></asp:Label></td>

<td style="width: 17px; height: 19px">

.</td>

<td style="width: 300px; height: 19px">

<asp:Label ID="lblCompanyName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"CompanyName") %>' Font-Names="Trebuchet MS" Font-Size="Small"></asp:Label></td>

</tr>

<tr>

<td style="width: 129px; height: 19px">

<asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Names="Trebuchet MS" Font-Size="Small"

Text="Contact Name"></asp:Label></td>

<td style="width: 17px; height: 19px">

:</td>

<td style="width: 300px; height: 19px">

<asp:Label ID="lblContactName" runat="server" Font-Names="Trebuchet MS" Text='<%# DataBinder.Eval(Container.DataItem,"ContactName") %>' Font-Size="Small"></asp:Label></td>

</tr>

<tr>

<td style="width: 129px; height: 19px">

</td>

<td style="width: 17px; height: 19px">

</td>

<td align="right" style="width: 300px; height: 19px">

&nbsp;</tr>

</table>

</ItemTemplate>

<AlternatingItemStyle BackColor="#F7F7F7" />

<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />

<ItemStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />

<EditItemTemplate>

</EditItemTemplate>

</asp:DataList>

Simdi datalistimizi görüntüleyecegimiz bir void yazalim.

protected string ConnectionDegiskeni()

{

//Connection String

return "Data Source=.; Initial Catalog=Northwind; uid=sa; pwd=";

}

protected void DatayiDoldur()

{

Baslangic = Convert.ToInt32(txtStart.Text);

BaslangicKaydi = (Baslangic * SayfadakiKayitSayisi) - SayfadakiKayitSayisi;

SqlConnection Cnn = new SqlConnection(ConnectionDegiskeni());

Cnn.Open();

SqlDataAdapter Da =new SqlDataAdapter("Select * From Customers", Cnn);

DataSet Ds = new DataSet();

Da.Fill(Ds, BaslangicKaydi, SayfadakiKayitSayisi, "Customers");

DataList1.DataSource = Ds.Tables[0].DefaultView;

DataList1.DataBind();

Cnn.Close();

}

Daha Sonra bu void’i Formun load’da çagiralim.

protected void Page_Load(object sender, EventArgs e)

{

DatayiDoldur();

}

Evet projemizi çalistirdigimizda tüm verilerin ekrana geldigini ve verilerin yavas yüklendigini göreceksiniz.

Evet kayitlarimizi listeledikten sonra artik sayfalam işlemine geçebiliriz. Bunun için datalistimizin altina bir adet label alalim ve text özelligini bosaltalim. Bu label üzerinde numeric değerleri gösterecegiz.

(1 | 2 | 3 | 4 …. gibi)

Projemize bir adet textbox ekleyelim adini txtStart yapalim ve visible özelligini false yapalim. Bu textbox içerisinde sayfa sayisini saklayacagiz.

Code kismina geçip asagidaki degiskenleri tanimlayalim.

private int Baslangic=1; // Görüntülenecek olan Sayfanin numarasi

private int SayfadakiKayitSayisi = 4;//Sayfada görüntülenecek olan kayit sayisi

private int BaslangicKaydi;//Databaseden çekilen datada baslanacak olan kaydin sayisi

private int ToplamSayfaSayisi;//Toplam sayfa sayisi

private int ToplamKayitSayisi()// Toplam kayit sayisini geri döndüren bir fonksiyon yazariz.

{

SqlConnection Cnn = new SqlConnection(ConnectionDegiskeni());

Cnn.Open();

SqlCommand myComm =new SqlCommand("Select Count(*) From Customers", Cnn);

int GeciciKayitSayisi = Convert.ToInt32(myComm.ExecuteScalar());

Cnn.Close();

return iTempRecordCount;

}

protected void Page_Load(object sender, EventArgs e)

{

//Toplam Sayfa Sayisi Aliniyor

if (ToplamKayitSayisi() % SayfadakiKayitSayisi == 0)

//toplam Kayit Sayisinin Sayfadaki Kayit sayisina göre modunu alıriz. Eger tam sonuç verirse Toplam kayit sayisina, Sayfadaki Kayit Sayisini bölmesi yeterli olur ancak tam sonuç vermezse sayfa sayisi 1 eksik çikar bunu önlemek için ToplamSayfaSayisi’ni 1 arttiririz.

{

ToplamSayfaSayisi = ToplamKayitSayisi() / SayfadakiKayitSayisi;

}

{

ToplamSayfaSayisi = ToplamKayitSayisi() / SayfadakiKayitSayisi + 1;

}

DatayiDoldur(); // Datayi ekrana getiririz.

if (!Page.IsPostBack)

{

// Numeric Sayfalama Bilgileri Olusturuluyor

int i;

for (i = 1; i <= ToplamSayfaSayisi; i++)

{

Label5.Text = Label5.Text + "<a href=default.aspx?sayfa=" + i + ">" + i + "</a>|";

//Label5 içerisine 1 den Toplam Sayfa Sayisina Kadar numeric değerler olusturuluyor. Sayilari olusturuyoruz ve bu sayilara link veriyoruz. Link yine ayni sayfaya gidiyor ve sayfa adinda bir querystring içerisinde sayfaya ait değeri gönderiyor.

}

try

{

//olusturulan numeric değerin gönderdigi querystring'e göre o sayfaya gidiliyor

Baslangic = int.Parse(Request.QueryString["sayfa"].ToString()); // burada queryden gelen değeri aliyoruz

txtStart.Text = Baslangic.ToString();

DatayiDoldur();//data yenileniyor

}

Catch //sayfa ilk açildiginda querystring bos olacagindan hata vermemesi için ve ilk kayittan baslamasi için basalangic degiskenine 1 değerini atariz.

{

Baslangic = 1;

}

}

Bilgiler();

}

// Yaptiklarimizi daha iyi anlamak için forma 4 adet label ekleyelim ve asagidaki voidi yazalim.daha sonra voidimizi form_Load da çagiralim.

protected void Bilgiler()

{

//Konuyu daha iyi anlamak için kullandigimiz degiskenleri ekrana bastik

lblBaslangicKaydi.Text = BaslangicKaydi.ToString();

lblGoruntulenecekKayitSayisi.Text = SayfadakiKayitSayisi.ToString(); ;

lblToplamKayitSayisi.Text = ToplamKayitSayisi().ToString();

lblToplamSayfaSayisi.Text = ToplamSayfaSayisi.ToString();

}

Numeric Sayfalama işlemini tamamladik ve artik yaptığımiz sayfayi görelim (:

Evet 5 numarali sayfayatiklayalim ve o sayfaya gidelim.

Madem Google örnegini verdik, Önceki ve sonraki butonlarinida ekleyelim (: Sayfamiza 2 adet link buton ekleyelim ve Text özelliklerini Önceki ve Sonraki olarak belirleyelim.

protected void lblOnceki_Click(object sender, EventArgs e)

{

// Önceki kayda gider

if (Baslangic > 1)

{

Baslangic = Baslangic - 1;

txtStart.Text = Baslangic.ToString();

DatayiDoldur();

Label4.Text = "";

Bilgiler();

}

}

protected void lbSonraki_Click(object sender, EventArgs e)

{

// Sonraki kayda gider

if (Baslangic < ToplamSayfaSayisi)

{

Baslangic = Baslangic + 1;

txtStart.Text = Baslangic.ToString();

DatayiDoldur();

Label4.Text = "";

Bilgiler();

}

}

Son kez projemizi çalistiralim ve sonucu görelim.

Bu makalenin de sonuna geldik baska bir makalede görüşmek dilegiyle, başarılar dilerim.

Sem GÖKSU

MCP | MCAD.NET | MCTS

askisem@hotmail.com

Not: Selçuk Yavuz’un yazmis oldugu Datalist ile Sayfalama makalesi bu makaleye kaynak olmustur.

Diger Kaynaklar;

Codeproject - Paging with Repeater control in ASP.NET

Yazar Hakkında 1 Yorum Yorum Yaz Yazara ait diğer Makaleler
Tema
Anket
ASP.NET MVC'yi Projeleriniz de kullandınız mı?


En Çok Okunan Makaleler
En Son Eklenen Makaleler
Soru Merkezinde Bekleyenler
Ana Sayfa | Hakkımızda | Editörler | Yazarlar | RSS RSS | İletişim
Yazılım Günlüğü 2007-2009 © Tüm Hakları Saklıdır.