Makale Özeti

Merhaba arkdaşlar, bu makalemizde Gridview kontrolü üzerinde Alfabetik sayfalamanın nasıl yapıldığına bakacağız.

Makale

Alfabetik Sayfalama

Bu makalemizde gridview de klasikleşmiş olan numeric bazlı yada navigation bazlı sayfalama düzeninden vazgeçip gridview üzerinde Alfabetik sayfalama yapacağız. Bu bize ne sağlayacak? Örneğin bir fihrist, sözlük vs.. yaptığımız da A harfindekileri kayıtları bulmak isteriz. Ya da sadece B harfindeki kayıtları... Klasik sayfalama (1.2.3 yada prev., next) bize burada çözüm olmayacaktır. İşte bunu çözmek için Alfabetik sayfalama en iyi çözümdür.


Şimdi isterseniz bu çözümü örnekleyelim; SQL Server 2005 içindeki AdventureWorks Database’indeki Person.Contact tablosundaki kayıtlarımı gridview ile listeleyelim.

İlk olarak bir web projesi açalım; Ben alışkanlık olarak ajax projesi açtım.



Daha sonra formumuzda ne yapacağımıza geçelim. Sayfamızda Alfabetik olarak sıralanan harfler olacak ve biz bu harflere tıkladığımız zaman; gridview de bu harfe bağlı olan(örneğin A ile başlayanlar) kayıtlar listelenecek.

İlk olarak formumuz üzerine bir adet panel ve gridview ekleyelim. Paneli ekledik çünkü bu panelin üzerine LinkButton’lar oluşturacağız.



Evet şimdi isterseniz projemize hareket katalım ve projemize AJAX özelliklerini de ekleyelim. Bunun için formumuza Script Menager, UpdatePanel ve UpdateProgress de ekleyelim.



Evet şimdi butonlara tıkladığımızda gridview refresh olmadan kayıtları listeleyecek. İsterseniz ilk olarak Panel üzerinde listelenecek olan Alfabetik Paging’i oluşturalım.

protected void CreateLink()

{

string[] letters = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",

"L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",

"W", "X", "Y", "Z", "All"};



for (int i = 0; i < letters.Length; i++)

{

LinkButton myLetter = new LinkButton();Yeni Bir LinkButton oluşturduk

myLetter.ID = myLetter + i.ToString();

myLetter.CommandName = "LetterPaging";//

myLetter.CommandArgument = letters[i].ToString();

myLetter.Text = letters[i].ToString() + " ";

myLetter.Command += new CommandEventHandler(myLetter_Command); // Burada Command Eventini oluşturuyoruz.

this.PagingPanel.Controls.Add(myLetter);//Oluşturulan Butonu Panel’e ekliyoruz

}

}



Şimdi isterseniz pagingimizi test edelim; Tabi önce bu Void’i form_load da çağırmalıyız.





Pagingimizi oluşturduk... Şimdi Bu linklere tıklanınca oluşacak olan kodları yazalım. Yukarıda

myLetter.Command += new CommandEventHandler(myLetter_Command);

Oluşturduğumuz Command eventi içerisini yazalım;



private void myLetter_Command(object sender, CommandEventArgs e)

{

if (e.CommandName.ToString() == "LetterPaging")

{

if (e.CommandArgument.ToString() != "All")

{

GetContactsByLetter(e.CommandArgument.ToString());

}

else

{

GetAllContacts();

}

}

}

Burada Command Name’e göre ve gelen commandArgument değerine göre 2 işlem yapılıyor; Eğer CommandArgument değeri All ise GetAllContacts Voidini çağırıyor değilse de GetContactsByLetter(“A”) voidini çağrıyor. Şimdi bunları oluşturalım.

SqlConnection Cnn;

SqlDataAdapter Da;

DataSet Ds;



private void GetAllContacts()//tüm kayıtları listele

{

Cnn = new SqlConnection("Data Source=localhost; initial catalog=AdventureWorks; trusted_connection=yes");

if (Cnn.State == ConnectionState.Closed) Cnn.Open();

Da = new SqlDataAdapter("SELECT top 20 FirstName + ´ ´ + LastName as ContactName, EmailAddress FROM Person.Contact", Cnn);

Ds = new DataSet();

Da.Fill(Ds, "TBL");

GridView1.DataSource = Ds.Tables[0];

GridView1.DataBind();

}

private void GetContactsByLetter(string Letter)//Gelen Harfe göre listele

{

Cnn=new SqlConnection("Data Source=localhost; initial catalog=AdventureWorks; trusted_connection=yes");

if (Cnn.State == ConnectionState.Closed) Cnn.Open();

Da = new SqlDataAdapter("SELECT top 20 FirstName + ´ ´ + LastName as ContactName, EmailAddress FROM Person.Contact where Firstname like ´" + Letter + "%´", Cnn);

Ds = new DataSet();

Da.Fill(Ds, "TBL");

GridView1.DataSource = Ds.Tables[0];

GridView1.DataBind();

}

Pagingimizden sonra Listelenecek olan kayıtlarımız da hazır; ama kullanıcı sayfaya geldiğinde sayfayı boş görmesin bunun için GetAllContacts voidini form_load da çağıralım. Tabi linkleri oluşturmak için CreateLink voidinide...

protected void Page_Load(object sender, EventArgs e)

{

GetAllContacts();

CreateLink();

}

Projemizi çalıştıralım;



Tüm kayıtlar listelendi; Şimdi a harfine tıklayalım;



Postback olmuyor ve Ajax UpdateProgress ile kullanıcıyı bilgilendiriyoruz...



Evet işte A harfi ie başlayan kullanıcıları listeledik : )

Bu makalenin de sonuna geldik, başka bir makalede görüşmek üzere başarı ve iyi günler dilerim.

Sem GÖKSU
MCP | MCAD.NET | MCTS

Örnek Kodlar için mail adresimi kullanabilirsiniz
semgoksu@ semgoksu.com

Kaynaklar
http://msdn.com
http://www.codeproject.com