26 Kas 2006 DATALİST İLE NUMERİC BAZLI SAYFALAMA Kategori: ASP.NET Etiketler: ASP.NETASP.NET 2.0ASP.NET 4.0 7 Yorum Merhaba arkadaşlar bu makalemde Datalist nesnesinde Numeric(1.2.3...) bazlı sayfalamanın nasıl yapılacağına bakacağız. Datalist ve Repeater nesnelerin de görüntülenecek kayıt sayısının çok fazla oldugu durumlar da kayıtlarımızı sayfalama ihtiyacı duyarız. Bu bize kayıtların daha hızlı görüntülenmesini saglar ve aynı zamanda kullanıcıya gösterilmek istenilen bilgi daha derli toplu gösterilir. Ben bu makalede sayfaları Numeric olarak listeletecegim ve gitmek istedigimiz sayfaya tıkladıgımızda o sayfaya gidebilecegiz. Örnek vermek gerekirse google' da "sem göksu" diye arama yaptıgımızda sayfaların 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 kullanacagım. Datalist nesnesi içerisinde de CustomerID, CompanyName ve ContactName Fieldlerini görüntüleyecegim. Benim düzenlemis oldugum Datalist Nesnesinin son hali asagıdaki gibidir; DatalistNesnesinin HTML Kodları; <asp:DataList ID="DataList1" runat="server" BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3" Font-Names="Verdana" 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="Tahoma" 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="Tahoma" 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="Tahoma" 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="Tahoma" 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="Tahoma" 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="Tahoma" 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"> </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 yazalım. 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 çagıralım. protected void Page_Load(object sender, EventArgs e) { DatayiDoldur(); } Evet projemizi çalıstırdıgımızda tüm verilerin ekrana geldigini ve verilerin yavas yüklendigini göreceksiniz. Evet kayıtlarımızı listeledikten sonra artık sayfalam islemine geçebiliriz. Bunun için datalistimizin altına bir adet label alalım ve text özelligini bosaltalım. Bu label üzerinde numeric degerleri gösterecegiz. (1 | 2 | 3 | 4 .. gibi) Projemize bir adet textbox ekleyelim adını txtStart yapalım ve visible özelligini false yapalım. Bu textbox içerisinde sayfa sayısını saklayacagız. Code kısmına geçip asagıdaki degiskenleri tanımlayalım. private int Baslangic=1; // Görüntülenecek olan Sayfanın numarası private int SayfadakiKayitSayisi = 4;//Sayfada görüntülenecek olan kayıt sayısı private int BaslangicKaydi;//Databaseden çekilen datada baslanacak olan kaydın sayısı private int ToplamSayfaSayisi;//Toplam sayfa sayısı private int ToplamKayitSayisi()// Toplam kayıt sayısını geri döndüren bir fonksiyon yazarız. { 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 Sayısı Alınıyor if (ToplamKayitSayisi() % SayfadakiKayitSayisi == 0) //toplam Kayıt Sayısının Sayfadaki Kayıt sayısına göre modunu alırız. Eger tam sonuç verirse Toplam kayıt sayısına, Sayfadaki Kayıt Sayısını bölmesi yeterli olur ancak tam sonuç vermezse sayfa sayısı 1 eksik çıkar bunu önlemek için ToplamSayfaSayisi'nı 1 arttırırız. { ToplamSayfaSayisi = ToplamKayitSayisi() / SayfadakiKayitSayisi; } { ToplamSayfaSayisi = ToplamKayitSayisi() / SayfadakiKayitSayisi + 1; } DatayiDoldur(); // Datayı 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 Sayısına Kadar numeric degerler olusturuluyor. Sayıları olusturuyoruz ve bu sayılara link veriyoruz. Link yine aynı sayfaya gidiyor ve sayfa adında bir querystring içerisinde sayfaya ait degeri gönderiyor. } try { //olusturulan numeric degerin gönderdigi querystring’e göre o sayfaya gidiliyor Baslangic = int.Parse(Request.QueryString["sayfa"].ToString()); // burada queryden gelen degeri alıyoruz txtStart.Text = Baslangic.ToString(); DatayiDoldur();//data yenileniyor } Catch //sayfa ilk açıldıgında querystring bos olacagından hata vermemesi için ve ilk kayıttan baslaması için basalangic degiskenine 1 degerini atarız. { Baslangic = 1; } } Bilgiler(); } // Yaptıklarımızı daha iyi anlamak için forma 4 adet label ekleyelim ve asagıdaki voidi yazalım.daha sonra voidimizi form_Load da çagıralım. protected void Bilgiler() { //Konuyu daha iyi anlamak için kullandıgımız degiskenleri ekrana bastık lblBaslangicKaydi.Text = BaslangicKaydi.ToString(); lblGoruntulenecekKayitSayisi.Text = SayfadakiKayitSayisi.ToString(); ; lblToplamKayitSayisi.Text = ToplamKayitSayisi().ToString(); lblToplamSayfaSayisi.Text = ToplamSayfaSayisi.ToString(); } Numeric Sayfalama islemini tamamladık ve artık yaptıgımız sayfayı görelim (: Evet 5 numaralı sayfayatıklayalım ve o sayfaya gidelim. Madem Google örnegini verdik, Önceki ve sonraki butonlarınıda ekleyelim (: Sayfamıza 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 çalıstıralım ve sonucu görelim. Bu makalenin de sonuna geldik baska bir makalede görüsmek dilegiyle, basarılar dilerim. Sem GÖKSU MCP | MCAD.NET askisem@hotmail.com Not: Selçuk Yavuz'un yazmıs oldugu Datalist ile Sayfalama makalesi bu makaleye kaynak olmustur. Diger Kaynaklar; Codeproject - Paging with Repeater control in ASP.NET Yorum (7) komik / 23.2.2009 14:58:07 selcuk yavuzun makalesini ne güzel değiştirip yazmışsın.. hala akıllanmadın mı sen :) sem göksu / 24.2.2009 00:07:42 Eğer eleştirmek kadar, okumayı ve anlamayıda becerebilseydiniz bu yorumu yazmanıza gerek kalmazdı... Samet EYÜBOĞLU / 2.3.2009 21:21:13 elinize sağlık ilk yorum yapan arkadaş da kendisi birşeyler üretmişse oda paylaşsın bizde faydalanalım.... volki / 10.8.2009 18:17:13 " komik " arkadaşım Selçuk Yavuzun Makalesini Yazılım Uzmanında okudum.Sem Göksu Arkadaşımızın makalesiyle sadece konular aynı ve ayrıca Selcuk Yavuzun Makalesindeki Kodları uygulamanı istiyorum sana zahmet olmassa BAK BAKALIM ÇALIŞIYORMU !? Emeğine ve Ellerine Sağlık SEM GÖKSU !!! Terbiyesizler / 6.9.2010 01:20:50 Madem o kadar çok biliyorsunuz siz neden yapmadınız ? aa pardon siz bir b...ktan anlamazsınız insanlar yapar siz o pis ziyniyetinizle çamur atarsınız. Sizin gibi insanlar ile aynı dünyada yaşamak UTANÇ veriyor... Deniz Yıldız / 12.8.2011 00:43:32 Herşey güzelde şu an herhangi bir sayfaya geçince bizim label'e yazdıgımız sayfasayıları gelmiyor sadece o anda oldugun sayfadaki sayı geliyor. Bunun çözümü nedir? Yorum Yaz * Ad Soyad: * Email: * Message:
Yorum (7) komik / 23.2.2009 14:58:07 selcuk yavuzun makalesini ne güzel değiştirip yazmışsın.. hala akıllanmadın mı sen :) sem göksu / 24.2.2009 00:07:42 Eğer eleştirmek kadar, okumayı ve anlamayıda becerebilseydiniz bu yorumu yazmanıza gerek kalmazdı... Samet EYÜBOĞLU / 2.3.2009 21:21:13 elinize sağlık ilk yorum yapan arkadaş da kendisi birşeyler üretmişse oda paylaşsın bizde faydalanalım.... volki / 10.8.2009 18:17:13 " komik " arkadaşım Selçuk Yavuzun Makalesini Yazılım Uzmanında okudum.Sem Göksu Arkadaşımızın makalesiyle sadece konular aynı ve ayrıca Selcuk Yavuzun Makalesindeki Kodları uygulamanı istiyorum sana zahmet olmassa BAK BAKALIM ÇALIŞIYORMU !? Emeğine ve Ellerine Sağlık SEM GÖKSU !!! Terbiyesizler / 6.9.2010 01:20:50 Madem o kadar çok biliyorsunuz siz neden yapmadınız ? aa pardon siz bir b...ktan anlamazsınız insanlar yapar siz o pis ziyniyetinizle çamur atarsınız. Sizin gibi insanlar ile aynı dünyada yaşamak UTANÇ veriyor... Deniz Yıldız / 12.8.2011 00:43:32 Herşey güzelde şu an herhangi bir sayfaya geçince bizim label'e yazdıgımız sayfasayıları gelmiyor sadece o anda oldugun sayfadaki sayı geliyor. Bunun çözümü nedir?
komik / 23.2.2009 14:58:07 selcuk yavuzun makalesini ne güzel değiştirip yazmışsın.. hala akıllanmadın mı sen :)
sem göksu / 24.2.2009 00:07:42 Eğer eleştirmek kadar, okumayı ve anlamayıda becerebilseydiniz bu yorumu yazmanıza gerek kalmazdı...
Samet EYÜBOĞLU / 2.3.2009 21:21:13 elinize sağlık ilk yorum yapan arkadaş da kendisi birşeyler üretmişse oda paylaşsın bizde faydalanalım....
volki / 10.8.2009 18:17:13 " komik " arkadaşım Selçuk Yavuzun Makalesini Yazılım Uzmanında okudum.Sem Göksu Arkadaşımızın makalesiyle sadece konular aynı ve ayrıca Selcuk Yavuzun Makalesindeki Kodları uygulamanı istiyorum sana zahmet olmassa BAK BAKALIM ÇALIŞIYORMU !? Emeğine ve Ellerine Sağlık SEM GÖKSU !!!
Terbiyesizler / 6.9.2010 01:20:50 Madem o kadar çok biliyorsunuz siz neden yapmadınız ? aa pardon siz bir b...ktan anlamazsınız insanlar yapar siz o pis ziyniyetinizle çamur atarsınız. Sizin gibi insanlar ile aynı dünyada yaşamak UTANÇ veriyor...
Deniz Yıldız / 12.8.2011 00:43:32 Herşey güzelde şu an herhangi bir sayfaya geçince bizim label'e yazdıgımız sayfasayıları gelmiyor sadece o anda oldugun sayfadaki sayı geliyor. Bunun çözümü nedir?