Makale Özeti

Datalist ve Sayfalama

Makale

Datalist ve Sayfalama

 

Datalist .net teknolojisinde bilgileri görüntüleme araçlarından biridir, .net sınıf hiyerarşisinde System.UI.WebControls sınıfna aittir. Dataset te bulunan bilgileri Datalist’in Header, Footer, Item, Seperator gibi stilleriyle daha anlaşılır bir formata sokarak kullanıcıya aktarmamızı sağlar.

 

15 adet ürünümüz sayfamızda listeleniyor ve yeni alıcıların beğenisini bekliyor. Ardından şirketimiz bu ürünlerin yanına yeni ürünler ekliyor ve ürün sayımız 77 ye kadar yükseliyor. Ve siz artık bu kadar ürünün bir sayfada görüntülenmemesi gerektiğini 10 ar veya 15 er sayfalar halinde görüntülenmesinin gerek sayfa yüklenme süresi gerek ziyaretçinin göz zevki açısından daha  uygun olacağını düşündünüz. Artık ürün listemizi sayfalara ayırmanın vakti geldi.

 

DataList in özelliklerine baktığımızda Paging özelliğinin olmadığını görüyoruz. DataList in görevi kendisine gönderilen DataSet in içeriğini görünrülemekse bizde ona görüntülemesi gereken kadar kayıtların içerdiği DataSet i göndeririz. Peki bu nasıl olacak ?

 

Not : Bu örnekte veritabanı olarak MSSQL Server ve örnek Database Northwind kullanıldı. Dolayısıyla MSSQL Server bağlanmak ve veritabanı işlemleri yapmak ve SqlConnection, SqlDataAdapter gibi sınıfları kullanabilmek için using satırına

 

using System.Data.SqlClient;

 

ifadesini ekledik.

 

Önce Veritabanımıza bağlanalım:

 

SqlConnection myConn = new SqlConnection("server=.;uid=sa;password=;database=northwind");

 

Daha Sonra Veritabanındaki bilgileri DataSet e aktarmamımıza yardımcı olacak DataAdapteri oluşturalım:

 

SqlDataAdapter myAdap = new SqlDataAdapter("Select * From Products",myConn);

 

Ve DataSetimizi oluşturup DataAdapterin Fill metoduyla dolduralım :

 

DataSet myDS = new DataSet();

myAdap.Fill(myDS,Orders");

 

Şu an DataAdapter metodunu oluşturken kullandığımız SQL ifadesinin sonucunda dönen bilgiler DataSetimizin içinde. SqlDataAdapter in Fill metodunda DataSet ve DataSet içinde oluşturulacak Tablo ismini göndererek kullandık. Bunun yanısıra Fill metoduna DataSeti doldururken kaçıncı kayıttan başlayacağı ve kaç kayıt okuyup dolduracağını söyeleyebiliyoruz.

 

myAdap.Fill(myDS,20,10,"Orders");

 

Bu şekilde 20nci kayıttan itibaren 10 kayıt okunur ve DataSete doldurulur. Bizim yapmamız gereken Fill metoduna hangi kayıttan başlayacağı ve kaç kayıt okuyacağını bildirmekten ibaret.

 

 

O halde sayfalamaya işlemi sırasında ihtiyacımız olan bilgileri edinmeye başlayalım.

 

  1. Görüntülenmekte olan sayfa numarası ( iStart )
  2. Görüntülenecek olan sayfa sayısı (iTotalPage )
  3. Sayfa bazı görüntülenecek kayıt sayısı (iPageSize )
  4. Toplam kayıt sayısı (iRecordCount )

 

 

Görüntülenmekte olan sayfa numarasını bir TextBox ta tutacağız. Kullanıcının bu TextBox ile bir işi olmadığından gizleyeceğiz.

 

TextBox.Visible = False;

 

Sayfa içinde kullanacağımız iki adette fonksiyona ihtiyacımız var. Bunlar GetPageCount() ve myDataBind().

 

GetPageCount fonksiyonu bizde toplam kayıt miktarını gönderecek. 

 

public int GetPageCount()

{

              SqlConnection myConn = new SqlConnection(sConnString);

             myConn.Open();

             SqlCommand myComm = new SqlCommand("Select Count(*) From Products",myConn);

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

             myComm.Dispose();

             myConn.Close();

             myConn.Dispose();

             return iTempRecordCount;

       }

 

myDataBind ise TextBox içinde belirttiğimiz sayfa numarasınını ifade eden

kayıtları DataSete ekleyip DataListimize aktarcak.

 

 

public void myDataBind()

       {

             iStart = Convert.ToInt32(txtStart.Text);

             iStartRecord = ( iStart * iPageSize ) - iPageSize;

             SqlConnection myConn = new SqlConnection(sConnString);

             myConn.Open();

             SqlDataAdapter myAdap = new SqlDataAdapter("Select * From Products",myConn);

             DataSet myDS = new DataSet();

             myAdap.Fill(myDS,iStartRecord,iPageSize,"Orders");

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

             DataList1.DataBind();

             myConn.Close();

             myConn.Dispose();

}

 

 

Bunun yanında sayfamıza dört adet buton ekleyeceğiz.

 

İlk Sayfa : TextBox ın değerine 1 atayıp myDataBind() fonksiyonunu çalıştıracak.

 

iStart = 1;

txtStart.Text = iStart.ToString();

      myDataBind();

 

Önceki Sayfa : TextBox ın değerini 1 eksiltip myDataBind() fonksiyonunu çalıştıracak.

     

      iStart = iStart - 1;

      txtStart.Text = iStart.ToString();

      myDataBind();

 

Sonraki Sayfa : TextBox ın değerini 1 arttırıp myDataBind() fonksiyonunu çalıştıracak.

     

      iStart = iStart + 1;

      txtStart.Text = iStart.ToString();

      myDataBind();

 

Son Sayfa : TextBox ın değerine Görüntülenecek olan sayfa sayısı (iTotalPage) değerini atayıp myDataBind() fonksiyonunu çalıştıracak.

     

      iStart = iTotalPage;

      txtStart.Text = iStart.ToString();

      myDataBind();

 

 

Görüntüleyeceğimiz ilk sayfa da İlk Sayfa ve Önceki Sayfa butonları ve görüntüleyeceğimiz son sayfada da Sonraki Sayfa ve Son Sayfa butonlarını butonları pasif edelimki kullanıcı İlk sayfada iken Önceki Sayfa butonuna basıp hata ile karşılaşmasın. Bunu için myDataBind fonksiyonuna şu satırları ekleyelim :

 

Button1.Enabled = ( iStart > 1 );

Button2.Enabled = ( iStart > 1 );

      Button3.Enabled = ( iTotalPage > iStart );

      Button4.Enabled = ( iTotalPage > iStart );

 

Şimdi burada bir alicengiz oyunu yapıyoruz J if sorgularını  ( iStart > 1 ) şeklinde yazıp çıkan değere göre işlemimizi yapıyorduk. Burada ( iStart > 1 ) ifadesinin zaten true/false döndürdüğünden direk Button un Enabled özelliğine atıyoruz.